-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcourse_schedule.java
34 lines (30 loc) · 992 Bytes
/
course_schedule.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
//Topological Sort, Khan's Algo
List<List<Integer>> adj = new ArrayList<>();
int[] indegree = new int[numCourses];
for(int i=0; i < numCourses; i++) {
adj.add(new ArrayList<>());
}
for(int i=0; i < prerequisites.length; i++) {
int u = prerequisites[i][1];
int v = prerequisites[i][0];
adj.get(u).add(v);
indegree[v]++;
}
Queue<Integer> q = new LinkedList<>();
for(int i=0; i < numCourses; i++) {
if(indegree[i] == 0) q.add(i);
}
int topo_sorted = 0;
while(q.size() > 0) {
int node = q.remove();
topo_sorted++;
for(int nbr: adj.get(node)) {
indegree[nbr]--;
if(indegree[nbr] == 0) q.add(nbr);
}
}
return topo_sorted == numCourses;
}
}