课程表-LeetCode100

news2024/9/24 5:26:27

现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。

例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。

返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组 。

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/course-schedule/submissions/567458574/?envType=study-plan-v2&envId=top-100-liked

如果把数据展开,我们会得到一张这样的图。

我们可以发现:1.加入我们学习了0课程,1课程就可以学了,1->2,学完后,但是你发现有3和4两门课,但是学完2不可以学4,因为学4之前你得学3,所以,你只能2->3,3->4,4->5,至此你才能学完所有得课程;

2.你发现如果一个点,它没有前缀点,我们就可以直接使用,并可以删除掉与相连得边,并较少相关点得点缀点的个数;

3.如果前缀点的都不为0,说明可能绕城一个环了,则不可能成功;

4.整体的解决流程:

① 构造执行点和前缀表的数据结构;

②判断前缀点为0的所有点,并将其存储起来tmp;

 ③在tmp中找到可以进行学习的点,遍历对应的指向点,根据数值修改前缀点的表,如果前缀点中的数据为0,则加入到map中;如果数据为0,则记录进行学习过的课程数count;

④根据记录的课程数count和总课程数判断,如果一致,则全部读完,否则,失败;

相关代码:

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        List<List<Integer>> tmp =new ArrayList<>();
        //给每个课程创建一个可指向的链表
        for(int i=0;i<numCourses;i++){
            List<Integer> cur =new ArrayList<>();
            tmp.add(cur);
        }
        //创建前缀点表
        int [] in =new int [numCourses];
        //填值
        for(int [] cur1 :prerequisites){
            int a =cur1[0];
            int b =cur1[1];
            in[b]++;
            List<Integer> cur2 =tmp.get(a);
            cur2.add(b);
        }
        int ret =0;
       
        Queue<Integer> queue =new LinkedList<>();
        //判断有无入读为0的点,将其存储起来
        for(int i=0;i<numCourses;i++){
            if(in[i]==0){
                //找get
                queue.add(i);
            }
        }
       //进行学习
        while(queue.size()>0){
            int t =queue.poll();//学习
            List<Integer> cur2 =tmp.get(t);
            for(int val:cur2 ){  //遍历,修改前缀表
                in[val]--;
                if(in[val]==0){   //学习过了
                    queue.add(val);
                }
            }
            cur2=null;  //将其置空,写不写都行,为了理解
            ret++;  //记录学习过的课程数
        }
        if(ret!=numCourses){  //判断是否都学习过
            return false;
        }
        return true;
    }
}

欧克,还有问题,可以私信我哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第432题全O(1)的数据结构

题目&#xff1a; 题解&#xff1a; class Node:def __init__(self, key"", count0):self.prev Noneself.next Noneself.keys {key}self.count countdef insert(self, node: Node) -> Node: # 在 self 后插入 nodenode.prev selfnode.next self.nextnode.…

【机器学习】——支持向量机

文章目录 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;概述SVM 的工作原理线性不可分数据&#xff1a;软间隔与核技巧SVM 的数学形式SVM 的优势SVM 的缺点SVM 的应用 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;概述 支持向量机&#…

JavaSE高级(3)——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解&#xff0c;需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

荣耀手机AI搜索革新体验:一键总结归纳,让信息获取更高效

在信息爆炸的时代&#xff0c;我们每天都被海量的数据包围&#xff0c;如何快速、准确地获取所需信息成为了现代人的一大挑战。 近日&#xff0c;荣耀手机宣布其AI搜索功能正式上线&#xff0c;这一创新举措不仅为使用者带来了前所未有的便捷体验&#xff0c;更在智能手机领域…

栈:只允许在一端进行插入或删除操作的线性表

一、重要术语&#xff1a; 栈顶、栈底、空栈 二、线性表的基本操作 三、栈的相关操作&#xff1a; 把线性表中的list改成stack insert改成 push delete 改成 pop 总结&#xff1a;“后进先出” 四、顺序栈&#xff1a; 缺点&#xff1a;栈的大小不可变 1.定义&#xff1a; …

生物反馈治疗仪——精神患者治疗方案

生物反馈治疗仪标准型由治疗仪主机、专用软件、电极帽&#xff08;含脑电放大器、电极线&#xff09;套装、电源适配器与显示器配套使用&#xff0c;终身免费软件升级。 与显示配套使用&#xff0c;对儿童多动症有辅助治疗作用。建议每周训练2&#xff5e;3次&#xff0c;每次训…

CSS的表格属性

border属性 规定CSS表格边框。 table,td{border: 1px solid green;/*1px表示设置边框的大小&#xff0c;solid表示边框为实线&#xff0c;green表示边框的颜*/} border-collpapse属性 设置表格的边框是否被折叠成一个单一的边框或隔开。 table{border-collapse: collapse;} wi…

2024从传统到智能,AI做PPT软件的崛起之路

随着AI技术的飞速进步&#xff0c;它已悄然渗透至我们的工作与学习之中&#xff0c;不仅助力写作与绘画创作&#xff0c;就连PPT制作这一传统办公领域也迎来了AI的革新。我最近有幸探索了一系列AI驱动的PPT制作工具&#xff0c;亲身体验后深感震撼——合理利用这些ai做ppt工具&…

Windows11系统安装,配置CUDA、cuDNN等

已经有大几年没有安装过 Windows 的系统了&#xff0c;今天因为黑神话悟空&#xff0c;准备把 Win 11 装一台&#xff0c;玩玩游戏&#xff0c;顺便把一些 CUDA 相关的异步解析项目也安装到 Window 上。 下载安装 PE 因为十几年前&#xff0c;只会用 PE 装系统&#xff0c;所…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Trace调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Trace调测旨在帮助开发者获取内核的运行流程&#xff0c…

java项目之基于springboot框架开发的景区民宿预约系统的设计与实现(源码+文档)

项目简介 基于springboot框架开发的景区民宿预约系统的设计与实现的主要使用者分为&#xff1a; 管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c;根据公告信息进行新增、修改、查询操作等等。。 &#x1…

英伟达NVIDIA数字IC后端笔试真题(ASIC Physical Design Engineer)

今天小编给大家分享下英伟达NVIDIA近两年数字IC后端笔试真题&#xff08;ASIC Physical Design&#xff09; 请使用OR门和INV反相器来搭建下面所示F逻辑表达式的电路图。 数字IC后端设计如何从零基础快速入门&#xff1f;(内附数字IC后端学习视频&#xff09; 2024届IC秋招兆…

Vue3学习---【API】【从零开始的Vue3学习!!!】

目录 应用实例API app.mount() unmount() 常规API version nextTick() 状态选项API data() 注意&#xff1a; methods() 生命周期选项 beforeCreate()和Created() beforeCreate() created() beforeCreate()和created()的区别 beforeMount()和mounted() beforeM…

统信服务器操作系统【targetcli部署】

targetcli部署方案 文章目录 功能概述功能介绍1.安装targetcli2.targetcli语法及参数说明3.示例1. 配置2.访问功能概述 SCSI 即小型计算机系统接口(Small Computer System Interface;简写:SCSI) iSCSI,internet SCSI 网络磁盘 ,提供一对一的网络存储, 主机A 提供xx存储设…

数据包签名校验的Web安全测试实践

01 测试场景 在金融类的Web安全测试中&#xff0c;经常可以见到Web请求和响应数据包加密和签名保护&#xff0c;由于参数不可见&#xff0c;不能重放请求包&#xff0c;这类应用通常不能直接进行有效的安全测试&#xff0c;爬虫也爬不到数据。 02 解决思路 对于这类应用&am…

内存和管理

在 C 中&#xff0c;对象拷贝时编译器可能会进行一些优化&#xff0c;以提高程序的性能。 一种常见的优化是“返回值优化&#xff08;Return Value Optimization&#xff0c;RVO&#xff09;”和“具名返回值优化&#xff08;Named Return Value Optimization&#xff0c;NRV…

记某学校小程序漏洞挖掘

前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离谱进去&#xff0c;站点里面越权泄露敏感信息&#xff0c;接管账号等漏洞&#xff01;&#xff01;&#xff01; 渗透思路 1.绕过前端 …

【学习笔记】TLS/SSL握手之Records

TLS / SSL会话是由记录&#xff08;Records&#xff09;所组成&#xff0c;有4种records HandshakeAlertChange Cipher SpecApplication DataHandshake和Alert Records被分为子类型&#xff08;Subtypes&#xff09;&#xff1a; Handshake&#xff1a;Client HelloHandshake&a…

新手教学系列——Nginx静态文件访问优化,提升加载速度与用户体验

在构建现代Web应用时,静态文件的优化往往被初学者所忽略。静态文件,包括CSS样式、JavaScript脚本和图片等,是构建用户界面的关键元素。然而,随着应用规模的扩大,静态文件的数量和大小也随之增加,页面加载速度因此可能受到严重影响,进而影响用户体验。为了应对这种情况,…

01——springboot2基础知识

一、springboot的快速入门 springboot的作用&#xff1a;用来简化Spring应用的初始搭建以及开发过程 一、idea创建springboot工程——运行的步骤 选择Spring Initializr进行创建&#xff08;现在基本上没有jdk1.8选了&#xff0c;都是jdk17了&#xff0c;需要的话&#xff0c…