Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit daa0c91

Browse files
Add solution for Course Schedule
1 parent 5311a95 commit daa0c91

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ Algorithm exercises from LeetCode implemented in Java v11.
146146
- Expression Add Operators | [Problem](https://leetcode.com/problems/expression-add-operators) | [Solution](src/solutions/ExpressionAddOperators.java)
147147

148148
### Topological Sort
149+
- Course Schedule | [Problem](https://leetcode.com/problems/course-schedule) | [Solution](src/solutions/CourseSchedule.java)
149150
- Find All Possible Recipes from Given Supplies | [Problem](https://leetcode.com/problems/find-all-possible-recipes-from-given-supplies) | [Solution](src/solutions/FindAllPossibleRecipes.java)
150151

151152
### Bit Manipulation

‎src/solutions/CourseSchedule.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package solutions;
2+
3+
import java.util.*;
4+
5+
// [Problem] https://leetcode.com/problems/course-schedule
6+
class CourseSchedule {
7+
// Topological sort
8+
// O(v + e) time, O(v + e) space
9+
// where v = number of courses, e = number of prerequisites
10+
public boolean canFinish(int numCourses, int[][] prerequisites) {
11+
Map<Integer, List<Integer>> nextCourseMap = new HashMap<>();
12+
int[] numPrerequisites = new int[numCourses];
13+
for (int[] courseToPrerequisite : prerequisites) {
14+
int course = courseToPrerequisite[0];
15+
int prerequisite = courseToPrerequisite[1];
16+
nextCourseMap.putIfAbsent(prerequisite, new ArrayList<>());
17+
nextCourseMap.get(prerequisite).add(course);
18+
numPrerequisites[course]++;
19+
}
20+
Queue<Integer> coursesToTake = new LinkedList<>();
21+
for (int i = 0; i < numCourses; i++) {
22+
if (numPrerequisites[i] == 0) {
23+
coursesToTake.add(i);
24+
}
25+
}
26+
int count = 0;
27+
while (!coursesToTake.isEmpty()) {
28+
int currentCourse = coursesToTake.poll();
29+
List<Integer> nextCourses = nextCourseMap.get(currentCourse);
30+
if (nextCourses != null) {
31+
for (int nextCourse : nextCourses) {
32+
if (--numPrerequisites[nextCourse] == 0) {
33+
coursesToTake.add(nextCourse);
34+
}
35+
}
36+
}
37+
count++;
38+
}
39+
return count == numCourses;
40+
}
41+
42+
// Test
43+
public static void main(String[] args) {
44+
CourseSchedule solution = new CourseSchedule();
45+
46+
int numCourses1 = 2;
47+
int[][] prerequisites1 = {{1, 0}};
48+
boolean expectedOutput1 = true;
49+
boolean actualOutput1 = solution.canFinish(numCourses1, prerequisites1);
50+
System.out.println("Test 1 passed? " + (expectedOutput1 == actualOutput1));
51+
52+
int numCourses2 = 3;
53+
int[][] prerequisites2 = {{1, 0}, {0, 1}};
54+
boolean expectedOutput2 = false;
55+
boolean actualOutput2 = solution.canFinish(numCourses2, prerequisites2);
56+
System.out.println("Test 2 passed? " + (expectedOutput2 == actualOutput2));
57+
}
58+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /