File tree 1 file changed +55
-0
lines changed
1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments