Skip to content

Commit b2f32e2

Browse files
committed
Add solution #210
1 parent 144db13 commit b2f32e2

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
207|[Course Schedule](./0207-course-schedule.js)|Medium|
191191
208|[Implement Trie (Prefix Tree)](./0208-implement-trie-prefix-tree.js)|Medium|
192192
209|[Minimum Size Subarray Sum](./0209-minimum-size-subarray-sum.js)|Medium|
193+
210|[Course Schedule II](./0210-course-schedule-ii.js)|Medium|
193194
211|[Design Add and Search Words Data Structure](./0211-design-add-and-search-words-data-structure.js)|Medium|
194195
213|[House Robber II](./0213-house-robber-ii.js)|Medium|
195196
214|[Shortest Palindrome](./0214-shortest-palindrome.js)|Hard|

solutions/0210-course-schedule-ii.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* 210. Course Schedule II
3+
* https://leetcode.com/problems/course-schedule-ii/
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 the ordering of courses you should take to finish all courses. If there are many valid
13+
* answers, return any of them. If it is impossible to finish all courses, return an empty array.
14+
*/
15+
16+
/**
17+
* @param {number} numCourses
18+
* @param {number[][]} prerequisites
19+
* @return {number[]}
20+
*/
21+
var findOrder = function(numCourses, prerequisites) {
22+
const graph = Array(numCourses).fill().map(() => []);
23+
const seen = new Set();
24+
const path = new Set();
25+
const result = [];
26+
27+
prerequisites.forEach(([c, p]) => graph[p].push(c));
28+
29+
for (let i = 0; i < numCourses; i++) {
30+
if (!seen.has(i) && !dfs(i)) {
31+
return [];
32+
}
33+
}
34+
35+
return result;
36+
37+
function dfs(course) {
38+
if (path.has(course)) return false;
39+
if (seen.has(course)) return true;
40+
41+
path.add(course);
42+
for (const c of graph[course]) {
43+
if (!dfs(c)) {
44+
return false;
45+
}
46+
}
47+
path.delete(course);
48+
seen.add(course);
49+
result.unshift(course);
50+
return true;
51+
}
52+
};

0 commit comments

Comments
 (0)