Skip to content

Commit 9e13aaa

Browse files
MEDIUM/src/medium/CourseScheduleII.java
1 parent 102751c commit 9e13aaa

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package medium;
2+
3+
import java.util.HashSet;
4+
import java.util.Iterator;
5+
import java.util.LinkedList;
6+
import java.util.Queue;
7+
import java.util.Set;
8+
9+
public class CourseScheduleII {
10+
11+
public int[] findOrder(int numCourses, int[][] prerequisites) {
12+
int[] degree = new int[numCourses];
13+
for(int[] course : prerequisites){
14+
degree[course[0]]++;
15+
}
16+
17+
Set<Integer> zeroDegree = new HashSet();
18+
Queue<Integer> q = new LinkedList();
19+
for(int i = 0; i < numCourses; i++){
20+
if(degree[i] == 0) {
21+
zeroDegree.add(i);
22+
q.offer(i);
23+
}
24+
}
25+
26+
if(zeroDegree.isEmpty()) return new int[0];
27+
28+
while(!zeroDegree.isEmpty()){
29+
Iterator<Integer> it = zeroDegree.iterator();
30+
int course = it.next();
31+
zeroDegree.remove(course);
32+
for(int[] pre : prerequisites){
33+
if(course == pre[1]){
34+
degree[pre[0]]--;
35+
if(degree[pre[0]] == 0){
36+
zeroDegree.add(pre[0]);
37+
q.offer(pre[0]);
38+
}
39+
}
40+
}
41+
}
42+
43+
for(int i = 0; i < numCourses; i++){
44+
if(degree[i] != 0) return new int[0];
45+
}
46+
47+
int[] result = new int[q.size()];
48+
int i = 0;
49+
while(!q.isEmpty()){
50+
result[i++] = q.poll();
51+
}
52+
return result;
53+
}
54+
55+
}

0 commit comments

Comments
 (0)