Skip to content

Commit daf94c7

Browse files
committed
Add solution #207
1 parent bc96d6f commit daf94c7

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
203|[Remove Linked List Elements](./0203-remove-linked-list-elements.js)|Easy|
109109
204|[Count Primes](./0204-count-primes.js)|Medium|
110110
206|[Reverse Linked List](./0206-reverse-linked-list.js)|Easy|
111+
207|[Course Schedule](./0207-course-schedule.js)|Medium|
111112
213|[House Robber II](./0213-house-robber-ii.js)|Medium|
112113
214|[Shortest Palindrome](./0214-shortest-palindrome.js)|Hard|
113114
215|[Kth Largest Element in an Array](./0215-kth-largest-element-in-an-array.js)|Medium|

solutions/0207-course-schedule.js

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* 207. Course Schedule
3+
* https://leetcode.com/problems/course-schedule/
4+
* Difficulty: Medium
5+
*
6+
* There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1.
7+
* You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you
8+
* must take course bi first if you want to take course ai.
9+
*
10+
* For example, the pair [0, 1], indicates that to take course 0 you have to first take course 1.
11+
*
12+
* Return true if you can finish all courses. Otherwise, return false.
13+
*/
14+
15+
/**
16+
* @param {number} numCourses
17+
* @param {number[][]} prerequisites
18+
* @return {boolean}
19+
*/
20+
var canFinish = function(numCourses, prerequisites) {
21+
const graph = new Map();
22+
const seen = new Set();
23+
24+
prerequisites.forEach(([course, prerequisite]) => {
25+
graph.set(course, graph.get(course) || []);
26+
graph.get(course).push(prerequisite);
27+
});
28+
29+
function dfs(course) {
30+
if (seen.has(course)) {
31+
return false;
32+
}
33+
seen.add(course);
34+
for (const prerequisite of graph.get(course) || []) {
35+
if (!dfs(prerequisite)) return false;
36+
}
37+
seen.delete(course);
38+
graph.set(course, []);
39+
return true;
40+
}
41+
42+
for (let i = 0; i < numCourses; i++) {
43+
if (!dfs(i)) {
44+
return false;
45+
}
46+
}
47+
48+
return true;
49+
};

0 commit comments

Comments
 (0)