文章目录

  • 1. 题目
  • 2. 解题

1. 题目

已知有 N 门课程,它们以 1 到 N 进行编号。

给你一份课程关系表 relations[i] = [X, Y],用以表示课程 X 和课程 Y 之间的先修关系:课程 X 必须在课程 Y 之前修完。

假设在一个学期里,你可以学习任何数量的课程,但前提是你已经学习了将要学习的这些课程的所有先修课程。

请你返回学完全部课程所需的最少学期数

如果没有办法做到学完全部这些课程的话,就返回 -1。

示例 1:

输入:N = 3, relations = [[1,3],[2,3]]
输出:2
解释:
在第一个学期学习课程 1 和 2,在第二个学期学习课程 3。

示例 2:

输入:N = 3, relations = [[1,2],[2,3],[3,1]]
输出:-1
解释:
没有课程可以学习,因为它们相互依赖。提示:
1 <= N <= 5000
1 <= relations.length <= 5000
relations[i][0] != relations[i][1]
输入中没有重复的关系

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/parallel-courses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

拓扑排序:图Graph–拓扑排序(Topological Sorting)

  • 拓扑排序模板题,入度为0的入队
class Solution {public:int minimumSemesters(int N, vector<vector<int>>& relations) {unordered_map<int,unordered_set<int>> m;vector<int> indegree(N+1, 0);for(auto& re:relations){indegree[re[1]]++;m[re[0]].insert(re[1]);}queue<int> q;int cur, size, sum = 0, finish = 0;for(int i = 1; i <= N; ++i)if(indegree[i] == 0)q.push(i);while(!q.empty()){size = q.size();while(size--){cur = q.front();q.pop();finish++;for(auto it = m[cur].begin(); it != m[cur].end(); ++it){if(--indegree[*it] == 0)q.push(*it);}}sum++;}return finish==N ? sum : -1;}
};

148 ms 26.3 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1136. 平行课程(拓扑排序)相关推荐

  1. LeetCode Course Schedule II(拓扑排序)

    问题:给出个课程个数,及前提条件对[v,u],即修课程v之前需要修课程u,如果可以输出修的课程顺序 思路: 对于有向图的拓扑排序 一种方式是使用dfs,访问结点的状态分为三种,white,gray,b ...

  2. LeetCode 207. 课程表(拓扑排序)

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

  3. Leetcode 1436旅行终点站 拓扑排序 并查集与队列

    题目介绍 题目难度: easy 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 ...

  4. leetcode 1203. 项目管理(拓扑排序)

    公司共有 n 个项目和 m 个小组,每个项目要不无人接手,要不就由 m 个小组之一负责. group[i] 表示第 i 个项目所属的小组,如果这个项目目前无人接手,那么 group[i] 就等于 -1 ...

  5. LeetCode Minimum Height Trees(拓扑排序)

    问题:给出一个图,要求确定树的根,使得树的高度最小. 思路:先求出结点的度.然后将度数为1的入队列.在出队列时,将其邻接结点的度数减1,如果度数为1,则放入队列.直接剩余的结点数小于等于2 具体代码参 ...

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

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

  7. 拓扑排序之java实现_有向图和拓扑排序Java实现

    package practice; import java.util.ArrayDeque; import java.util.Iterator; import java.util.Stack; pu ...

  8. 教学计划编制问题(数据结构 有向图 拓扑排序)

    本文对以下教学计划编制问题的解决作出实现,主要使用c语言(带一点cpp),开发环境为codeblocks 17.12,希望对各位读者有所帮助.(源码和数据文件可在主页获取,数据文件需要和exe在同一目 ...

  9. LeetCode 2050. 并行课程 III(拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n . 同时给你一个二维整数数组 relations ,其中 relations[j] = [p ...

最新文章

  1. Linux内核同步:RCU
  2. 我的WEB之路(一)-2.JAVA学习路线
  3. [TJOI2019]甲苯先生的滚榜——非旋转treap
  4. java中array_Java 中的array数组总结之一
  5. rsyslog日志管理+LogAnalyzer
  6. 每日一皮:男人有三宝「胡子、发型和肌肉」...
  7. c:#ifndef, #define, #endif 作用
  8. 【DA算法】基于DA算法的FIR滤波器的FPGA实现
  9. php 模仿 java_js模仿java的Map集合,实现功能
  10. JSP页面中taglib的uri设置
  11. 验证码识别,打码平台
  12. 微信小程序--萌系登陆界面
  13. Coreldraw修改平面图独到漂亮见解就在这里了
  14. MIPI DSI协议笔记
  15. 如何搭建储能监控云平台?
  16. 微信小程序生成携带参数的二维码
  17. 嘉年华回顾丨王涛带你探秘新一代分布式数据库
  18. idea自定义壁纸_IDEA2020.1个性化设置(装逼且实用)
  19. 虚拟空间iis环境下如何隐藏index.php
  20. 得物购买截图生成_推荐一款长截图app--滚动截屏(iOS)

热门文章

  1. excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
  2. 笔试常见的智力题(附答案)
  3. oracle中的merge into用法解析
  4. Python编程之数据结构与算法练习_004
  5. 完全理解Gson(1):简单入门
  6. Elastci LogStash
  7. Android 中如何计算 App 的启动时间?
  8. [转]java 组播
  9. 小白学数据分析-----聚类分析理论之TwoSteps理论篇+实践篇
  10. SubSonic中的字段付值--MakeOld Update