Skip to content

Commit ad63f81

Browse files
committed
Course Schedule
1 parent 891b6c0 commit ad63f81

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

course-schedule/TonyKim9401.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// TC: O(n + p)
2+
// n -> number of courses, p -> the length of prerequisites
3+
// SC: O(n + m)
4+
// n -> the length of the graph size, m -> the length of nested list's size
5+
class Solution {
6+
public boolean canFinish(int numCourses, int[][] prerequisites) {
7+
List<List<Integer>> graph = new ArrayList<>();
8+
int[] inDegree = new int[numCourses];
9+
10+
for (int i = 0; i < numCourses; i++) graph.add(new ArrayList<>());
11+
12+
for (int[] prerequisite : prerequisites) {
13+
int course = prerequisite[0];
14+
int pre = prerequisite[1];
15+
graph.get(pre).add(course);
16+
inDegree[course] += 1;
17+
}
18+
19+
Queue<Integer> q = new LinkedList<>();
20+
for (int i = 0; i < numCourses; i++) {
21+
if (inDegree[i] == 0) q.offer(i);
22+
}
23+
24+
int visitedCourses = 0;
25+
while (!q.isEmpty()) {
26+
int course = q.poll();
27+
visitedCourses += 1;
28+
29+
for (int nextCourse : graph.get(course)) {
30+
inDegree[nextCourse] -= 1;
31+
if (inDegree[nextCourse] == 0) q.offer(nextCourse);
32+
}
33+
}
34+
35+
return visitedCourses == numCourses;
36+
}
37+
}

0 commit comments

Comments
 (0)