leetcode 207. Course Schedule | 207. 课程表(Java)
题目
https://leetcode.com/problems/course-schedule/
题解
这的道题思路,来源于数据结构中的 拓扑排序 问题,主要思路是,通过逐步遍历删除入度为 0 的节点,判断该图是否一个有向无环图(DAG)。即,判断该图是否满足两个条件:
- 必须能够连通所有节点 (分析本题场景发现,可以不经过所有节点)
- 不能有环
详细解题思路见下图:
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)相关推荐
- leetcode 210. Course Schedule II | 210. 课程表 II(Java)
题目 https://leetcode.com/problems/course-schedule-ii/ 题解 本题与 leetcode 207. Course Schedule 基本相同,代码只需要 ...
- 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中
Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...
- 【LeetCode】76. 最小覆盖子串 (Java代码)
[LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...
- [LeetCode] 36. 有效的数独(java实现)模拟题
[LeetCode] 36. 有效的数独(java实现)模拟题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...
- 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中
<LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...
- [leetcode]207. Course Schedule课程表
在一个有向图中,每次找到一个没有前驱节点的节点(也就是入度为0的节点),然后把它指向其他节点的边都去掉,重复这个过程(BFS),直到所有节点已被找到,或者没有符合条件的节点(如果图中有环存在). /* ...
- 207. Course Schedule 课程表
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 . 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他 ...
- 207. Course Schedule
输入:课程数量n,每个课程的编号是0到n-1.课程学习的先后顺序用数组输入,例如[0,1].要学习课程0,需要先学习课程1. 输出:如果可以学习完所有的课程,返回true,否则返回false. 分析: ...
- 207. Course Schedule 210. Course Schedule II
拓扑排序的问题 套路: 1. 初始化所有的节点的入度为零. 2. 遍历给定的输入要求. 维护一个indegree 的表.记录每个节点的入度. 维护map, 每个节点的后续节点 3. 得到这两个表以后开 ...
最新文章
- 网盘们打打打起来了(doge)
- opencv检测黑色区域
- 什么是物联网?—Vecloud 微云
- 计算机网络电缆被拔出是怎么办,网络电缆被拔出是什么意思?网络电缆被拔出的修复办法...
- mysql c语言教程,C语言调用mysql快速教程(精华篇).pdf
- python权威指南 pdf_Ansible权威指南pdf txt mobi下载及读书笔记
- iOS底层探索之KVC
- button css背景透明,css背景透明
- 跟我一起学习ZeroMQ(8):带broker的发布订阅模式:ZMQ_PUB、broker(ZMQ_XPUB和ZMQ_XSUB)、ZMQ_SUB
- Spark复习大纲,有需要的小伙伴可以点个赞找我私信
- 网易楚留香获取服务器信息,楚留香手游生活采集物有哪些 获取攻略
- 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步
- 常用计算机字体的后缀名是,自考计算机应用基础试题及参考答案
- 关于“源代码未编译“问题的回复
- 基于 HTML5 WebGL 的高炉炉体三维热力图监控,展示“智慧工厂”十八般武艺
- 什么样的笔记本适合编程?
- c语言词典课程设计报告,英汉电子词典C语言课程设计
- 【GDOI2003】排列的编码 {康托展开+高精度}
- OpenCV 画任意圆弧曲线
- 使用MATLAB控制笔记本电脑的摄像头,并进行实时人脸检测和识别
热门文章
- UVALive - 3231 Fair Share(最大流+二分)
- HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)
- 计算机硬盘满了怎么解决,使用SSD硬盘空间清理 C盘爆满怎么办
- centos yum 安装java_Linux Centos 使用 yum 安装java
- C++读图片——Mac下对于bmp文件读写读取过大的解决方案
- Python数据库的连接
- C++ STL的妙用
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
- 反汇编程序导致程序crash的解决思路
- 【Boost】boost库中thread多线程详解10——condition条件变量