Leetcode: Course Schedule II
来源:互联网 发布:学漫画的软件 编辑:程序博客网 时间:2024/05/16 10:06
0
ton - 1
.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:[0,1]
Given the total number of courses and a list of prerequisite pairs, return the ordering of courses you should take to finish all courses.
There may be multiple correct orders, you just need to return one of them. If it is impossible to finish all courses, return an empty array.
For example:
2, [[1,0]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is[0,1]
4, [[1,0],[2,0],[3,1],[3,2]]
There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. So one correct course order is[0,1,2,3]
. Another correct ordering is[0,2,1,3]
.
Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more abouthow a graph is represented.
跟上个题一样,只是把路径打出来。直观的拓扑排序会简单些,从入度为0的节点算起。
class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { vector<int> result; vector<int> indegrees(numCourses, 0); vector<vector<pair<int, int>>> edges(numCourses); for (int i = 0; i < prerequisites.size(); ++i) { edges[prerequisites[i].second].push_back(prerequisites[i]); ++indegrees[prerequisites[i].first]; } // Find all nodes with zero indegrees. queue<int> zeroIndegrees; for (int i = 0; i < numCourses; ++i) { if (indegrees[i] == 0) { zeroIndegrees.push(i); } } // Remove vertex with zero indegree. while (!zeroIndegrees.empty()) { int curNode = zeroIndegrees.front(); zeroIndegrees.pop(); result.push_back(curNode); --numCourses; for (const auto& iter : edges[curNode]) { if (--indegrees[iter.first] == 0) { zeroIndegrees.push(iter.first); } } } if (numCourses > 0) { result.clear(); } return result; }};
- [leetcode]Course Schedule II
- leetcode - Course Schedule II
- LeetCode Course Schedule II
- [leetcode] Course Schedule II
- leetcode:Course Schedule II
- [LeetCode] Course Schedule II
- Leetcode Course Schedule II
- 【leetcode】Course Schedule II
- leetcode Course Schedule II
- LeetCode Course Schedule II
- [leetcode] Course Schedule II
- #leetcode#Course Schedule II
- LeetCode Course Schedule II
- leetcode Course Schedule II
- Course Schedule II -- leetcode
- Leetcode: Course Schedule II
- [Leetcode] Course Schedule II
- LeetCode -- Course Schedule II
- 剑指offer面试题5-从尾到头打印链表/6-重建二叉树
- Swift详解之一 -------- 变量声明
- linuc之waitpid
- 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题
- Perl学习(二)
- Leetcode: Course Schedule II
- opencv3.0.0的python接口导出
- 每天五个java相关面试题(4)
- hdu4322 candy 费用流
- 哈夫曼树
- 开放源码的安卓天气应用-android学习之旅(73)
- LeetCode187——Repeated DNA Sequences
- webview和js交互
- C语言常用宏定义