首页 > 其他分享 >8-102-(LeetCode- 207&210) 课程表II

8-102-(LeetCode- 207&210) 课程表II

时间:2023-07-17 15:00:19浏览次数:37  
标签:207 210 int 入度 numCourses 数组 课程表 new 节点

1. 题目

读题

210. 课程表 II

 

考查点

 

2. 解法

思路

 

这道题的解答思路是使用拓扑排序来判断有向图是否有环,如果有环,说明无法完成所有课程,如果没有环,输出拓扑排序的结果。拓扑排序的基本思想是从有向图中选择一个没有前驱(即入度为0)的顶点并输出,然后从图中删除该顶点和所有以它为起点的有向边,重复这一步骤直到所有顶点均已输出,或者当前图中不存在无前驱的顶点为止。后一种情况说明有向图中必然存在环。

拓扑排序可以用深度优先搜索或者广度优先搜索来实现。深度优先搜索的方法是对每个未访问的节点,执行以下操作:

  • 标记当前节点为访问中
  • 递归访问当前节点的所有邻接节点,如果发现已经访问过或者正在访问中的节点,说明存在环,返回false
  • 标记当前节点为已访问,并将其加入结果栈
  • 返回true

广度优先搜索的方法是维护一个队列和一个入度数组,入度数组记录每个节点的前驱节点个数。初始时,将所有入度为0的节点加入队列,并将其加入结果列表。然后执行以下操作:

  • 从队列中弹出一个节点
  • 遍历该节点的所有邻接节点,将其入度减一
  • 如果某个邻接节点的入度变为0,将其加入队列,并将其加入结果列表
  • 重复以上步骤直到队列为空

如果结果列表的长度等于课程数,说明可以完成所有课程,否则说明存在环。

代码逻辑

 

具体实现

 

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        // 邻接表
        List<List<Integer>> adj = new ArrayList<>();
        for (int i = 0; i < numCourses; i++) {
            adj.add(new ArrayList<>());
        }
        // 入度数组
        int[] indegrees = new int[numCourses];
        // 遍历先决条件,构建邻接表和入度数组
        for (int[] p : prerequisites) {
            adj.get(p[1]).add(p[0]);
            indegrees[p[0]]++;
        }
        // 结果数组
        int[] res = new int[numCourses];
        // 记录结果数组的索引
        int index = 0;
        // 队列,存放入度为0的节点
        Queue<Integer> queue = new LinkedList<>();
        // 将所有入度为0的节点入队,并加入结果数组
        for (int i = 0; i < numCourses; i++) {
            if (indegrees[i] == 0) {
                queue.offer(i);
                res[index++] = i;
            }
        }
        // 当队列不为空时,循环以下操作
        while (!queue.isEmpty()) {
            // 出队一个节点
            int cur = queue.poll();
            // 遍历该节点的邻接节点,将其入度减一
            for (int next : adj.get(cur)) {
                indegrees[next]--;
                // 如果某个邻接节点的入度变为0,将其入队,并加入结果数组
                if (indegrees[next] == 0) {
                    queue.offer(next);
                    res[index++] = next;
                }
            }
        }
        // 如果结果数组的长度等于课程数,说明可以完成所有课程,返回结果数组
        if (index == numCourses) {
            return res;
        }
        // 否则,返回一个空数组
        return new int[0];
    }
}

3. 总结

 

标签:207,210,int,入度,numCourses,数组,课程表,new,节点
From: https://www.cnblogs.com/shoshana-kong/p/17560131.html

相关文章

  • antd from 表单中的key 不能绑定input中的字段 Input.js:207 Uncaught (in promise)
    <Formclass="NewVersion"ref="formRef"name="NewVersion":model="formData"><Spacev-for="(newPg,index)informData.version":key="index"style="dis......
  • POJ 2109 Power of Cryptography 数学题 double和float精度和范围
    PowerofCryptographyTimeLimit:1000MSMemoryLimit:30000KTotalSubmissions:21354Accepted:10799DescriptionCurrentworkincryptographyinvolves(amongotherthings)largeprimenumbersandcomputingpowersofnumbersamongtheseprimes.Workint......
  • KBP210-ASEMI大功率LED驱动器桥堆KBP210
    编辑:llKBP210-ASEMI大功率LED驱动器桥堆KBP210型号:KBP210品牌:ASEMI封装:KBP-4恢复时间:≥200n0s正向电流:2A反向耐压:1000V芯片个数:4引脚数量:4类型:整流桥、桥堆特性:薄体扁桥、插件桥堆浪涌电流:60A正向压降:1.1V封装尺寸:如图工作温度:-50°C~150°CKBP210应用范围适配器......
  • LeetCode 207. 课程表
    classSolution{public:boolcanFinish(intn,vector<vector<int>>&pre){if(pre.empty()||pre[0].empty())returntrue;vector<vector<bool>>g(n,vector<bool>(n,false));for(autoq:pre)......
  • 深入理解ASEMI整流桥KBP210特性及其应用
    编辑-Z在电子工程领域,整流器是一种重要的元件,它能将交流电(AC)转换为直流电(DC)。其中,整流桥KBP210是一种常见的整流器,因其优秀的性能和广泛的应用,受到了工程师们的青睐。本文将深入探讨整流桥KBP210的特性、工作原理以及应用。 首先,我们来了解一下整流桥KBP210的基本特性。KBP210......
  • 图-邻接表-leetcode207
    你这个学期必须选修​​numCourses​​​门课程,记为​​0​​​到​​numCourses-1​​。在选修某些课程之前需要一些先修课程。先修课程按数组​​prerequisites​​给出,其中​​prerequisites[i]=[ai,bi]​​,表示如果要学习课程​​ai​​则必须先学习课程......
  • 图-邻接表-leetcode207
    你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses-1 。在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出,其中 prerequisites[i]=[ai,bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0,1] 表示:想要......
  • 012双写一致性之定时更新,异步发送短信,异步秒杀逻辑前后端,课程页面前端,课程相关表分析,
    0双写一致性之定时更新#一旦加入缓存,就会出现数据不一致的请请求#双写一致性问题 -1改数据,删缓存-2改数据,改缓存-3定时更新#首页轮播图存在双写一致性问题这个问题 -以现在的技术水平(信号),做不到:改数据删缓存 -能选择的就是定时更新 -轮播......
  • 天合光能产品怎么样?新一代光储电站系统以及210至尊系列“黄金尺寸”组件闪耀欧洲
     6月16日,德国Intersolar展会圆满落幕。天合光能携新一代光储电站系统解决方案以及领先的至尊N型700W超高功率组件首度亮相欧洲市场。此外,包括中版型605W及小版型450W在内的210“黄金尺寸”全系列N型组件,以及新一代N型i-TOPcon先进技术吸引了大量专业参观者深度交流。 01“黄......
  • UVA210 双端队列模拟并行程序
    #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<vector>#include<queue>#include<cstring>usingnamespacestd;constintmaxn=10001;//uva210:题意模拟n个程序的并行执行,有赋值,打印,lock,unlock,......