题目

https://leetcode.com/problems/course-schedule/

题解

这的道题思路,来源于数据结构中的 拓扑排序 问题,主要思路是,通过逐步遍历删除入度为 0 的节点,判断该图是否一个有向无环图(DAG)。即,判断该图是否满足两个条件:

  1. 必须能够连通所有节点 (分析本题场景发现,可以不经过所有节点)
  2. 不能有环

详细解题思路见下图:

import java.util.ArrayList;class Node {int inDegree;ArrayList<Integer> children;boolean alive; // whether deletedpublic Node() {alive = true;children = new ArrayList<>();}
}class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {// init coursesNode[] nodes = new Node[numCourses];for (int i = 0; i < numCourses; i++) {nodes[i] = new Node();}// init prerequisitesfor (int i = 0; i < prerequisites.length; i++) {nodes[prerequisites[i][0]].children.add(prerequisites[i][1]);nodes[prerequisites[i][1]].inDegree++;}// check DAGint remain = numCourses; // remaining nodesboolean valid = true; // last loop really workswhile (valid && remain > 0) {valid = false;for (int i = 0; i < numCourses; i++) {if (nodes[i].inDegree == 0 && nodes[i].alive) {for (int n : nodes[i].children) { // updatenodes[n].inDegree--;}valid = true;nodes[i].alive = false;remain--;}}}return remain == 0;}
}

每一次提交运行时间不一样,但总体来看效率比较低,后续看一下是否有优化解法。

leetcode 207. Course Schedule | 207. 课程表(Java)相关推荐

  1. leetcode 210. Course Schedule II | 210. 课程表 II(Java)

    题目 https://leetcode.com/problems/course-schedule-ii/ 题解 本题与 leetcode 207. Course Schedule 基本相同,代码只需要 ...

  2. 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中

    Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...

  3. 【LeetCode】76. 最小覆盖子串 (Java代码)

    [LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...

  4. [LeetCode] 36. 有效的数独(java实现)模拟题

    [LeetCode] 36. 有效的数独(java实现)模拟题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...

  5. 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中

    <LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...

  6. [leetcode]207. Course Schedule课程表

    在一个有向图中,每次找到一个没有前驱节点的节点(也就是入度为0的节点),然后把它指向其他节点的边都去掉,重复这个过程(BFS),直到所有节点已被找到,或者没有符合条件的节点(如果图中有环存在). /* ...

  7. 207. Course Schedule 课程表

    你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 . 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他 ...

  8. 207. Course Schedule

    输入:课程数量n,每个课程的编号是0到n-1.课程学习的先后顺序用数组输入,例如[0,1].要学习课程0,需要先学习课程1. 输出:如果可以学习完所有的课程,返回true,否则返回false. 分析: ...

  9. 207. Course Schedule 210. Course Schedule II

    拓扑排序的问题 套路: 1. 初始化所有的节点的入度为零. 2. 遍历给定的输入要求. 维护一个indegree 的表.记录每个节点的入度. 维护map, 每个节点的后续节点 3. 得到这两个表以后开 ...

最新文章

  1. 网盘们打打打起来了(doge)
  2. opencv检测黑色区域
  3. 什么是物联网?—Vecloud 微云
  4. 计算机网络电缆被拔出是怎么办,网络电缆被拔出是什么意思?网络电缆被拔出的修复办法...
  5. mysql c语言教程,C语言调用mysql快速教程(精华篇).pdf
  6. python权威指南 pdf_Ansible权威指南pdf txt mobi下载及读书笔记
  7. iOS底层探索之KVC
  8. button css背景透明,css背景透明
  9. 跟我一起学习ZeroMQ(8):带broker的发布订阅模式:ZMQ_PUB、broker(ZMQ_XPUB和ZMQ_XSUB)、ZMQ_SUB
  10. Spark复习大纲,有需要的小伙伴可以点个赞找我私信
  11. 网易楚留香获取服务器信息,楚留香手游生活采集物有哪些 获取攻略
  12. 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步
  13. 常用计算机字体的后缀名是,自考计算机应用基础试题及参考答案
  14. 关于“源代码未编译“问题的回复
  15. 基于 HTML5 WebGL 的高炉炉体三维热力图监控,展示“智慧工厂”十八般武艺
  16. 什么样的笔记本适合编程?
  17. c语言词典课程设计报告,英汉电子词典C语言课程设计
  18. 【GDOI2003】排列的编码 {康托展开+高精度}
  19. OpenCV 画任意圆弧曲线
  20. 使用MATLAB控制笔记本电脑的摄像头,并进行实时人脸检测和识别

热门文章

  1. UVALive - 3231 Fair Share(最大流+二分)
  2. HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)
  3. 计算机硬盘满了怎么解决,使用SSD硬盘空间清理 C盘爆满怎么办
  4. centos yum 安装java_Linux Centos 使用 yum 安装java
  5. C++读图片——Mac下对于bmp文件读写读取过大的解决方案
  6. Python数据库的连接
  7. C++ STL的妙用
  8. IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
  9. 反汇编程序导致程序crash的解决思路
  10. 【Boost】boost库中thread多线程详解10——condition条件变量