207-Course Schedule
【题目】
你有n门课程需要上,几位0到n-1.
有些课程需要一些预备课程,例如:上课程0前需要先上课程1,表示为对[0,1]
假设给你所有课程和这些课程的对关系,有可能上完所有课程吗?
举例:
2 , [[1,0]]
这有2个课程需要完成,完成课程1前需要完成课程0,所以是可能的。
2 , [[1,0],[0,1]]
这有2个课程需要完成,完成课程1前需要完成课程0,完成课程0前需要完成课程1,所以是不可能的。
【分析】
1. 问题可以抽象为图的问题,就是判断图里是否存在环
2. 解决方法:(拓扑排序),求出所有点的入度,循环遍历n(n为点个数)次,每一次循环里判断是否有点的入度 为0;若所有的点的入度都不为0,return false;
反之,当前点的入度置为-1,进入下一次循环;跳出循环后,return true
【算法实现】
public class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {List<Set<Integer>> ls = new ArrayList<Set<Integer>>();for(int i=0; i<numCourses; i++) {ls.add(new HashSet<Integer>());}for(int i=0; i<prerequisites.length; i++) {ls.get(prerequisites[i][1]).add(prerequisites[i][0]);}int[] preNum = new int[numCourses];for(int i=0; i<numCourses; i++) {Set<Integer> set = ls.get(i); Iterator<Integer> it = set.iterator();while(it.hasNext()) {preNum[it.next()]++;}}for(int i=0; i<numCourses; i++) {int j;for(j=0; j<numCourses; j++) {if(preNum[j]==0)break;}if(j==numCourses)return false;preNum[j] = -1;Set<Integer> set = ls.get(j);Iterator<Integer> it = set.iterator();while(it.hasNext()) {preNum[it.next()]--;}}return true;} }
转载于:https://www.cnblogs.com/hwu2014/p/4518015.html
207-Course Schedule相关推荐
- 207. Course Schedule 210. Course Schedule II
拓扑排序的问题 套路: 1. 初始化所有的节点的入度为零. 2. 遍历给定的输入要求. 维护一个indegree 的表.记录每个节点的入度. 维护map, 每个节点的后续节点 3. 得到这两个表以后开 ...
- 207. Course Schedule
输入:课程数量n,每个课程的编号是0到n-1.课程学习的先后顺序用数组输入,例如[0,1].要学习课程0,需要先学习课程1. 输出:如果可以学习完所有的课程,返回true,否则返回false. 分析: ...
- 207. Course Schedule 课程表
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 . 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他 ...
- leetcode 207. Course Schedule | 207. 课程表(Java)
题目 https://leetcode.com/problems/course-schedule/ 题解 这的道题思路,来源于数据结构中的 拓扑排序 问题,主要思路是,通过逐步遍历删除入度为 0 的节 ...
- [leetcode]207. Course Schedule课程表
在一个有向图中,每次找到一个没有前驱节点的节点(也就是入度为0的节点),然后把它指向其他节点的边都去掉,重复这个过程(BFS),直到所有节点已被找到,或者没有符合条件的节点(如果图中有环存在). /* ...
- leetcode 210. Course Schedule II | 210. 课程表 II(Java)
题目 https://leetcode.com/problems/course-schedule-ii/ 题解 本题与 leetcode 207. Course Schedule 基本相同,代码只需要 ...
- 继续过中等难度.0309
. 8 String to Integer (atoi) 13.9% Medium . 151 Reverse Words in a String 15.7% Mediu ...
- LeetCode 399. Evaluate Division--Python-DFS解法
题目地址:Evaluate Division - LeetCode Equations are given in the format A / B = k, where A and B are var ...
- LeetCode 所有题目总结
文章目录 做题注意事项 题目分类 1.位运算 2.字符串题型 3.TopK 问题--最大堆/最小堆 4.链表 5.动态规划 easy Medium hard 6.贪心 7.树 8.图 9.数学题 10 ...
- Depth-first Search深度优先搜索专题4
576. Out of Boundary Paths 思路:这道题目难倒了我.最直接的思路是暴力搜索.要注意的问题1是需要仔细观察Example2,轨迹不同意思是可以从A点到B点,再从B点到A点也可以 ...
最新文章
- Linux 命令 top 学习总结
- python_0基础开始_day05
- 笔记本html连接电视机,WinXP系统的笔记本如何连接电视?笔记本连接液晶电视方法...
- 公式中表达单个双引号【】和空值【】的方法及说明
- 4.6上午口语练习 阅读词汇
- Laravel Facades的实现原理
- Android进阶2之oauth认证中UC无法跳转的问题
- H5 FormData 表单数据对象详解 与 Json 对象相互转换
- Tesseract OCR iOS 教程
- 数字图像处理 matlab 报告总结,matlab数字图像处理实验报告
- Ectouch修改虚拟销售数量的方法
- Mugeda(木疙瘩)H5案例课—快闪制作-岑远科-专题视频课程
- SAP 配额协议及策略解析
- 云平台与操作系统两种架构的分析
- 秃鹫入门4,GDB调试与OpenCV图像库
- 计算机flash拉开效果,使用Flash制作卷轴展开效果
- 马斯克推荐加密通讯聊天软件Signalv5.13.8跨平台国际版几何管家出品
- 简单模拟Lur 算法
- 最新网站证书提示风险的原因和几个解决方法
- sem竞价账户投放建议技巧学会转化翻倍
热门文章
- Maven+struts2+spring4+hibernate4的环境搭建
- VC/MFC Combo Box控件的用法
- 打包python程序发布_Python代码的打包与发布详解
- jenkins 下载插件 一直失败_Jenkins安装与插件下载
- 实时计算 Flink 版总体介绍
- dubbo-go v1.5.6来喽!
- 《口袋奇兵》开发商引入阿里云PolarDB数据库 IT成本降幅达50%
- linux端口绑定moute,Linux下网卡驱动的安装(未完结)
- 腾讯光子《黎明觉醒》技术美术负责人:如何制作超真实的开放世界?
- unity3d干货分享:实现敌人锥形视角的3个方法