Skip to content

Commit 40bb0b1

Browse files
authored
Update Parallel Courses.java
1 parent 5502fe6 commit 40bb0b1

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

Medium/Parallel Courses.java

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
11
class Solution {
2-
public int minimumSemesters(int n, int[][] relations) {
3-
Map<Integer, List<Integer>> graph = new HashMap<>();
4-
int[] indegree = new int[n + 1];
5-
for (int[] relation : relations) {
6-
graph.computeIfAbsent(relation[0], k -> new ArrayList<>()).add(relation[1]);
7-
indegree[relation[1]]++;
8-
}
9-
Queue<Integer> queue = new LinkedList<>();
10-
int numOfSemesters = 0;
11-
Set<Integer> coursesTaken = new HashSet<>();
12-
for (int i = 1; i <= n; i++) {
13-
if (indegree[i] == 0) {
14-
queue.add(i);
15-
}
16-
}
17-
while (!queue.isEmpty()) {
18-
int size = queue.size();
19-
while (size-- > 0) {
20-
int course = queue.remove();
21-
coursesTaken.add(course);
22-
for (int dependentCourse : graph.getOrDefault(course, new ArrayList<>())) {
23-
indegree[dependentCourse]--;
24-
if (indegree[dependentCourse] <= 0 && !coursesTaken.contains(dependentCourse)) {
25-
queue.add(dependentCourse);
26-
}
2+
public int minimumSemesters(int n, int[][] relations) {
3+
Map<Integer, Set<Integer>> graph = new HashMap<>();
4+
int[] indegree = new int[n];
5+
for (int[] relation : relations) {
6+
int course = relation[0];
7+
int dependency = relation[1];
8+
indegree[course - 1]++;
9+
graph.computeIfAbsent(dependency, k -> new HashSet<>()).add(course);
10+
}
11+
Queue<Integer> queue = new LinkedList<>();
12+
int numOfSemesters = 0;
13+
int coursesTaken = 0;
14+
for (int i = 0; i < n; i++) {
15+
if (indegree[i] == 0) {
16+
queue.add(i + 1);
17+
}
18+
}
19+
while (!queue.isEmpty()) {
20+
int size = queue.size();
21+
while (size-- > 0) {
22+
int removed = queue.remove();
23+
coursesTaken++;
24+
for (Integer dependent : graph.getOrDefault(removed, new HashSet<>())) {
25+
indegree[dependent - 1]--;
26+
if (indegree[dependent - 1] == 0) {
27+
queue.add(dependent);
28+
}
29+
}
30+
}
31+
numOfSemesters++;
2732
}
28-
}
29-
numOfSemesters++;
33+
return coursesTaken == n ? numOfSemesters : -1;
3034
}
31-
return coursesTaken.size() == n ? numOfSemesters : -1;
32-
}
3335
}

0 commit comments

Comments
 (0)