Skip to content

Commit 09b5f38

Browse files
committed
add: Course Schedule
1 parent da490d1 commit 09b5f38

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ This is the solutions collection of my LeetCode submissions, most of them are pr
4949
|196|[Delete Duplicate Emails](https://leetcode.com/problems/delete-duplicate-emails/) | [SQL](./src/delete-duplicate-emails/res.txt)|Easy|
5050
|197|[Rising Temperature](https://leetcode.com/problems/rising-temperature/) | [SQL](./src/rising-temperature/res.txt)|Easy|
5151
|206|[Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) | [JavaScript](./src/reverse-linked-list/res.js)|Easy|
52+
|207|[Course Schedule](https://leetcode.com/problems/course-schedule/) | [JavaScript](./src/course-schedule/res.js)|Medium|
5253
|240|[Search a 2D Matrix II](https://leetcode.com/problems/search-a-2d-matrix-ii/) | [JavaScript](./src/search-a-2d-matrix-ii/res.js)|Medium|
5354
|307|[Range Sum Query - Mutable](https://leetcode.com/problems/range-sum-query-mutable/) | [JavaScript](./src/range-sum-query-mutable/res.js)|Medium|
5455
|342|[Power of Four](https://leetcode.com/problems/power-of-four/) | [JavaScript](./src/power-of-four/res.js)|Easy|

src/course-schedule/res.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* res.js
3+
* @authors Joe Jiang ([email protected])
4+
* @date 2017-04-17 00:09:34
5+
*
6+
* There are a total of n courses you have to take, labeled from 0 to n - 1.
7+
*
8+
* Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]
9+
*
10+
* Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
11+
*
12+
* For example:
13+
*
14+
* 2, [[1,0]]
15+
* There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
16+
*
17+
* 2, [[1,0],[0,1]]
18+
* There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
19+
*
20+
* @param {number} numCourses
21+
* @param {number[][]} prerequisites
22+
* @return {boolean}
23+
*/
24+
let canFinish = function(numCourses, prerequisites) {
25+
let prelen = prerequisites.length,
26+
maxNoCircle = numCourses * (numCourses - 1) / 2;
27+
if (!prelen) {
28+
return true;
29+
} else if (prelen > maxNoCircle) {
30+
return false;
31+
}
32+
33+
let flags = [], // 存储未访问节点
34+
nodemarks = new Array(numCourses), // 存储node访问标记
35+
edges = new Array(numCourses); // 存储连边信息
36+
for (let i = 0; i < numCourses; i++) {
37+
flags.push(i);
38+
nodemarks[i] = 0;
39+
edges[i] = [];
40+
}
41+
42+
for (let i = 0; i < prelen; i++) {
43+
let source = prerequisites[i][0],
44+
target = prerequisites[i][1];
45+
46+
edges[target].push(source);
47+
}
48+
49+
while (flags.length) {
50+
let node = flags[flags.length - 1];
51+
if (!dfsVisit(node)) {
52+
return false;
53+
}
54+
flags.pop();
55+
}
56+
57+
return true;
58+
59+
function dfsVisit(node) {
60+
if (nodemarks[node]) {
61+
return false;
62+
}
63+
64+
if (flags.indexOf(node) !== -1) {
65+
nodemarks[node] = 1;
66+
let elen = edges[node].length;
67+
for (let i = 0; i < elen; i++) {
68+
if (!dfsVisit(edges[node][i])) {
69+
return false;
70+
}
71+
}
72+
nodemarks[node] = 0;
73+
}
74+
75+
return true;
76+
}
77+
};

0 commit comments

Comments
 (0)