File tree 1 file changed +43
-0
lines changed
1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
1
+ //Leetcode 210. Course Schedule II
2
+ //Question - https://leetcode.com/problems/course-schedule-ii/
3
+ //Kahn's Topological Sort
4
+
5
+ class Solution {
6
+ public int [] findOrder (int numCourses , int [][] prerequisites ) {
7
+ int result [] = new int [numCourses ];
8
+ int cntVertex = 0 ;
9
+ Queue <Integer > inDegree0 = new LinkedList <>();
10
+ int inDegree [] = new int [numCourses ];
11
+ Arrays .fill (inDegree ,0 );
12
+
13
+ for (int i =0 ; i <prerequisites .length ; i ++){
14
+ inDegree [prerequisites [i ][0 ]]++;
15
+ }
16
+
17
+ for (int i =0 ; i <numCourses ; i ++){
18
+ if (inDegree [i ]==0 ) inDegree0 .add (i );
19
+ }
20
+
21
+ while (!inDegree0 .isEmpty ()){
22
+ int curr = inDegree0 .poll ();
23
+ ArrayList <Integer > neighbours = findNeighbours (prerequisites ,curr );
24
+ result [cntVertex ] = curr ;
25
+
26
+ for (int neighbour : neighbours ){
27
+ if (--inDegree [neighbour ]==0 ) inDegree0 .add (neighbour );
28
+ }
29
+ cntVertex ++;
30
+ }
31
+
32
+ if (cntVertex !=numCourses ) return (new int [0 ]);
33
+ else return result ;
34
+ }
35
+
36
+ public ArrayList <Integer > findNeighbours (int [][] prerequisites , int v ){
37
+ ArrayList <Integer > neighbours = new ArrayList <Integer >();
38
+ for (int i =0 ;i <prerequisites .length ;i ++){
39
+ if (prerequisites [i ][1 ]==v ) neighbours .add (prerequisites [i ][0 ]);
40
+ }
41
+ return neighbours ;
42
+ }
43
+ }
You can’t perform that action at this time.
0 commit comments