[LeetCode206] Course Schedule II
2015-09-03 15:09
323 查看
There are a total of n courses you have to take, labeled from
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:
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:
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
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
Another correct ordering is
Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how
a graph is represented.
solution: similar to "course schedule" need to record the path.
0to
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:
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 about how
a graph is represented.
solution: similar to "course schedule" need to record the path.
public int[] findOrder(int numCourses, int[][] prerequisites) { List<HashSet<Integer>> paths = new ArrayList<HashSet<Integer>>(); for(int i=0; i<numCourses;i++){ paths.add(new HashSet<Integer>()); } //initialize graph -- adjeced list graph for(int i=0;i<prerequisites.length;i++){ paths.get(prerequisites[i][1]).add(prerequisites[i][0]); } //calculate each node degree int[] degrees = new int[numCourses]; for(int i=0;i<numCourses;i++){ for(int j: paths.get(i)){ degrees[j]++; } } //store node which degree is 0 Queue<Integer> road = new LinkedList<>(); for(int i=0;i<numCourses;i++){ if(degrees[i]==0) road.offer(i); } int[] result = new int[numCourses]; int count = 0; while(!road.isEmpty()){ int cur = road.poll(); for(int i: paths.get(cur)){ degrees[i]--; if(degrees[i]==0){ road.offer(i); } } result[count++] = cur; } if(count == numCourses) return result; return new int[0]; }
相关文章推荐
- MySQL的MyISAM与InnoDB的索引方式
- LoadRunner利用ODBC编写MySql脚本
- android 小诀窍
- C++ I/O流文件处理(整型,字符,字符串)
- CodeForces 9C - Hexadecimal's Numbers
- C++智能指针原理
- UIAlertView
- SQL Server 触发器
- 压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate
- linux版本号的意义
- iOS测试包自动分发,一键安装,效率提高百分百
- cognos点击报表标题,自动打开某一时间的报表内容
- visio画UML用例图没有include关系的解决方法
- 在NAT内网环境下使用nginx+nat123搭建外网可访问的代理服务器
- Struts2(一)---struts2的环境搭建及实例
- C++之随笔(一)
- Struts2(一)---struts2的环境搭建及实例
- Connection reset by peer的常见原因
- AI (Adobe Illustrator)详细用法(二)
- oracle分区表详解