力扣207:课程表

  • 题目
  • 思路与算法
  • 代码实现

题目

题目链接:课程表
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。

在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]

给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?

思路与算法

  1. 注意该题示例2给到的提示,即意思是构成的图不能有环,可能会联想到最短路径系列的算法,迪杰斯拉,贝尔曼福特之类的算法,但本题只要求判断正误,跟最短路径关系不大,仔细读题发现就是一道拓扑排序的问题,给定的所谓前置必修课程即为入点,一切都已经注释好了,不可能看不懂。

代码实现

class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {// 注意pre数组的每一维的前后关系别弄反,后者是前者的前置依赖必修课。int[] beforeClassCounts = new int[numCourses]; List<List<Integer>> dependencyLists = new ArrayList<>();for (int i = 0; i < numCourses; i++) {dependencyLists.add(new ArrayList<>());}Queue<Integer> queue = new LinkedList<Integer>();// 将每个课程的入度记录下来// 将每个节点的 以该节点为前置依赖必修课的课程记录下来for (int[] pre : prerequisites) {beforeClassCounts[pre[0]]++;dependencyLists.get(pre[1]).add(pre[0]);}// 将入度为0的课程直接入队,获取以该课程为前置必修课的课程列表,遍历这些列表,将其入度-1。for (int i = 0;i < numCourses; i++) {if (beforeClassCounts[i] == 0) {queue.add(i);}}// 并进行判断,若这些列表中的课程此时的入度为1,即这些课程此时可以修了,将其入队。while (!queue.isEmpty()){int FinishedCourse = queue.poll();// numCourses--; 放前后都可以for (int cur : dependencyLists.get(FinishedCourse)) {if ( --beforeClassCounts[cur] == 0) {queue.add(cur);}}numCourses--;}// 因为入队的课程已经修了,总修课程数目-1。//当没有入度为1的课程时判断此时的已修课程数目与必修总课程numCourse的大小关系,为0则true,否则为false。return numCourses == 0;}
}

20200805:Java拓扑排序实现力扣207课程表相关推荐

  1. 20200806:Java拓扑排序实现力扣210课程表Ⅱ

    力扣210:课程表Ⅱ 题目 思路与算法 代码实现 题目 题目链接:课程表Ⅱ 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要 ...

  2. 滑动窗口算法框架(Java版)秒杀力扣题(76、567、438、3、485)

    一.声明 1.非常感谢东哥(labuladong)分享了**滑动窗口算法框架**: 2.我在理解了东哥的思想后,用Java实现了滑动窗口算法框架,一来方便自己学习,二来方便一些Java小伙伴: 3.再 ...

  3. 【JAVA】交错字符串——力扣每日一题(六)(2020.07.18)

    目录 题目:97. 交错字符串 思路 如果你从本文中学习到丝毫知识,那么请您点点关注.点赞.评论和收藏 大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博 ...

  4. java 刷题ide,力扣(LeetCode)刷题神器之Vs Code

    力扣(Leet Code)介绍 相信不少学习编程的人对 LeetCode 这个网站是相当之熟悉的,这是一个专供程序员们练习编程能力的网站,主要侧重于算法方面,想进入一线大厂必备技能没有之一. 作为一个 ...

  5. 力扣Java解数独_LeetCode 力扣 37. 解数独

    题目描述(困难难度) 给定一个数独棋盘,输出它的一个解. 解法一 回溯法 从上到下,从左到右遍历每个空位置.在第一个位置,随便填一个可以填的数字,再在第二个位置填一个可以填的数字,一直执行下去直到最后 ...

  6. 2418. 按身高排序-快速排序力扣双百代码

    给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights .两个数组的长度均为 n . 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的 ...

  7. 排个课表学会了拓扑排序!有点意思

    原创不易,帅哥美女呢请三连支持一波 前言 大家好,我是bigsai. 拓扑排序,很多人都可能听说但是不了解的一种算法.不知者大多会提出这样的疑问: 这是某种排序算法?这好像是一种图论算法?图也能排序? ...

  8. LeetCode 210. 课程表 II(拓扑排序)

    1. 题目 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课 ...

  9. 力扣学习记录(每日更新)

    文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...

最新文章

  1. 原创 | 吐血推荐,B站最强学习资源汇总(数据科学,机器学习,python)
  2. Python 列表 sort() 方法
  3. 基于keras的深度学习基本概念讲解
  4. eclipse format的时候如何让@param后不换行
  5. 三十、深入Python中的Pickle和Json模块
  6. oracle plsql异常,【Oracle篇】异常处理和PLSQL
  7. smith标准型_线性系统理论(八)多项式矩阵Smith-McMillan标准型计算方法
  8. request payload怎么发_做了一个个人博客,但不知道怎么介绍
  9. linux shell期末测试,LINUX期末复习---SHELL编程
  10. Android LruCache技术原理
  11. c# winform窗体边框风格的设计
  12. zabbix api 接口的自动化
  13. 泰坦尼克号数据下载链接
  14. 安卓 java hook 免root_[原创]利用VirtualApp实现免Root注入Hook(一)
  15. 设计师和程序员必备5个超赞的配色工具,从此配色无忧!
  16. Unity中实现四舍五入
  17. idea easyYapi插件导入yapi接口使用及踩坑记录
  18. 移动硬盘提示需要格式化怎么办?数据可以恢复吗
  19. 开发一个标题为Flipflop的游戏应用程序
  20. C语言 N个人围圈报数,数到3退出

热门文章

  1. 一文看尽 TensorFlow“奋斗史”!| CSDN 博文精选
  2. Android 10 重磅来袭:支持 5G 与折叠屏、隐私安全全面升级!
  3. 微软 CTO 韦青:5G 与亚里士多德
  4. 苹果欲把 Swift 扶上位!
  5. 解密 TCP/IP!
  6. HTTP/1 已死!
  7. Java 即将迎来转折点
  8. Hacker News 12 月招聘趋势:React 已连续霸榜 19 个月
  9. 福建工程学院计算机专利,基于车床硬件平台的再制造数控滚齿机专利_专利查询 - 天眼查...
  10. mysql 5.7.19 rpm下载_centos6.8 mysql5.7 rpm安装与完全卸载