【题目】

    你有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相关推荐

  1. 207. Course Schedule 210. Course Schedule II

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

  2. 207. Course Schedule

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

  3. 207. Course Schedule 课程表

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

  4. leetcode 207. Course Schedule | 207. 课程表(Java)

    题目 https://leetcode.com/problems/course-schedule/ 题解 这的道题思路,来源于数据结构中的 拓扑排序 问题,主要思路是,通过逐步遍历删除入度为 0 的节 ...

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

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

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

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

  7. 继续过中等难度.0309

      .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Mediu ...

  8. LeetCode 399. Evaluate Division--Python-DFS解法

    题目地址:Evaluate Division - LeetCode Equations are given in the format A / B = k, where A and B are var ...

  9. LeetCode 所有题目总结

    文章目录 做题注意事项 题目分类 1.位运算 2.字符串题型 3.TopK 问题--最大堆/最小堆 4.链表 5.动态规划 easy Medium hard 6.贪心 7.树 8.图 9.数学题 10 ...

  10. Depth-first Search深度优先搜索专题4

    576. Out of Boundary Paths 思路:这道题目难倒了我.最直接的思路是暴力搜索.要注意的问题1是需要仔细观察Example2,轨迹不同意思是可以从A点到B点,再从B点到A点也可以 ...

最新文章

  1. Linux 命令 top 学习总结
  2. python_0基础开始_day05
  3. 笔记本html连接电视机,WinXP系统的笔记本如何连接电视?笔记本连接液晶电视方法...
  4. 公式中表达单个双引号【】和空值【】的方法及说明
  5. 4.6上午口语练习 阅读词汇
  6. Laravel Facades的实现原理
  7. Android进阶2之oauth认证中UC无法跳转的问题
  8. H5 FormData 表单数据对象详解 与 Json 对象相互转换
  9. Tesseract OCR iOS 教程
  10. 数字图像处理 matlab 报告总结,matlab数字图像处理实验报告
  11. Ectouch修改虚拟销售数量的方法
  12. Mugeda(木疙瘩)H5案例课—快闪制作-岑远科-专题视频课程
  13. SAP 配额协议及策略解析
  14. 云平台与操作系统两种架构的分析
  15. 秃鹫入门4,GDB调试与OpenCV图像库
  16. 计算机flash拉开效果,使用Flash制作卷轴展开效果
  17. 马斯克推荐加密通讯聊天软件Signalv5.13.8跨平台国际版几何管家出品
  18. 简单模拟Lur 算法
  19. 最新网站证书提示风险的原因和几个解决方法
  20. sem竞价账户投放建议技巧学会转化翻倍

热门文章

  1. Maven+struts2+spring4+hibernate4的环境搭建
  2. VC/MFC Combo Box控件的用法
  3. 打包python程序发布_Python代码的打包与发布详解
  4. jenkins 下载插件 一直失败_Jenkins安装与插件下载
  5. 实时计算 Flink 版总体介绍
  6. dubbo-go v1.5.6来喽!
  7. 《口袋奇兵》开发商引入阿里云PolarDB数据库 IT成本降幅达50%
  8. linux端口绑定moute,Linux下网卡驱动的安装(未完结)
  9. 腾讯光子《黎明觉醒》技术美术负责人:如何制作超真实的开放世界?
  10. unity3d干货分享:实现敌人锥形视角的3个方法