Skip to content

Commit 392aaf6

Browse files
committed
3. Course Schedule
1 parent b009b13 commit 392aaf6

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

course-schedule/sunjae95.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* @description
3+
* memoization + dfs
4+
*
5+
* n = length of nums
6+
* p = length of prerequisites
7+
*
8+
* time complexity: O(n)
9+
* space complexity: O(p)
10+
*/
11+
var canFinish = function (numCourses, prerequisites) {
12+
const memo = Array.from({ length: numCourses + 1 }, () => false);
13+
const visited = Array.from({ length: numCourses + 1 }, () => false);
14+
// graph setting
15+
const graph = prerequisites.reduce((map, [linkedNode, current]) => {
16+
const list = map.get(current) ?? [];
17+
list.push(linkedNode);
18+
map.set(current, list);
19+
return map;
20+
}, new Map());
21+
22+
const dfs = (current) => {
23+
const linkedNode = graph.get(current);
24+
25+
if (memo[current] || !linkedNode || linkedNode.length === 0) return true;
26+
27+
for (const node of linkedNode) {
28+
if (visited[node]) return false;
29+
30+
visited[node] = true;
31+
if (!dfs(node)) return false;
32+
visited[node] = false;
33+
memo[node] = true;
34+
}
35+
36+
return true;
37+
};
38+
39+
for (const [current] of graph) {
40+
visited[current] = true;
41+
if (!dfs(current)) return false;
42+
visited[current] = false;
43+
memo[current] = true;
44+
}
45+
46+
return true;
47+
};

0 commit comments

Comments
 (0)