LeetCode 210 Course Schedule II
2015-12-08 10:22
531 查看
题目描述
There are a total of n courses you have to take, labeled from 0 to n - 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:
[code]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]
[code]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 about how a graph is represented.
分析
参考:LeetCode 207 Course Schedule只是加了一句话而已,用于保存结果。注意prerequisites为空的时候,任意输出一组结果即可。
代码
[code] public static int[] findOrder(int numCourses, int[][] prerequisites) { // 参数检查 if (prerequisites == null) { throw new IllegalArgumentException(); } int len = prerequisites.length; if (len == 0) { int[] seq = new int[numCourses]; for (int i = 0; i < seq.length; i++) { seq[i] = i; } return seq; } int[] seq = new int[numCourses]; int c = 0; // 记录每个course的prerequisites的数量 int[] pCounter = new int[numCourses]; for (int i = 0; i < len; i++) { pCounter[prerequisites[i][0]]++; } // 用队列记录可以直接访问的course LinkedList<Integer> queue = new LinkedList<Integer>(); for (int i = 0; i < numCourses; i++) { if (pCounter[i] == 0) { queue.add(i); } } // 取出队列的course,判断 int numNoPre = queue.size(); while (!queue.isEmpty()) { int top = queue.remove(); // 保存结果 +_+ seq[c++] = top; for (int i = 0; i < len; i++) { // 该course是某个course的prerequisites if (prerequisites[i][1] == top) { pCounter[prerequisites[i][0]]--; if (pCounter[prerequisites[i][0]] == 0) { numNoPre++; queue.add(prerequisites[i][0]); } } } } if (numNoPre != numCourses) { return new int[] {}; } return seq; }
相关文章推荐
- LoadRunner 技巧之 集合点设置
- PHP MPDF中文乱码的解决方式
- expected at least 1 bean which qualifies as autowire candidate for this depe
- RHCE 系列(十):在 RHEL/CentOS 7 中设置 NTP(网络时间协议)服务器
- Strictmode的使用
- iOS 一个控件内字符显示不同的字体,大小和颜色
- Maven的安装
- android ndk
- sphinx简介+全文索引
- 成本中心和内部订单浅析
- LeetCode(94) Binary Tree Inorder Traversal解题报告
- 苹果自带高德地图搜索周边功能
- Linux 下 Apache 模块开发
- soap toolkit 3.0
- VS2012 输入中文变"??"解决办法
- adb devices 出现??? no permissions 的解决方法
- STL 源代码分析 算法 stl_algo.h -- merge
- GNU名称解析
- 动态添加删除上传图片标签
- CvMat,Mat和IplImage之间的转化和拷贝