Skip to content

Commit 3bef1a9

Browse files
committed
[leet] course schedules
1 parent 3d670ef commit 3bef1a9

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @param {number} numCourses
3+
* @param {number[][]} prerequisites
4+
* @return {boolean}
5+
*/
6+
var canFinish = function(numCourses, prerequisites) {
7+
const from = new Map()
8+
const to = new Map()
9+
for(let i = 0 ; i < numCourses; i++){
10+
from.set(i,0)
11+
}
12+
13+
for(let i = 0 ; i < prerequisites.length; i++){
14+
const [a,b] = prerequisites[i]
15+
if(!to.get(b)) to.set(b, [])
16+
to.get(b).push(a)
17+
from.set(a, from.get(a)+1)
18+
}
19+
20+
const q = []
21+
for(let val of from){
22+
if(val[1] === 0){
23+
q.push(val[0])
24+
from.delete(val[0])
25+
}
26+
}
27+
while(q.length){
28+
const cur = q.shift()
29+
const arr = to.get(cur)
30+
if(arr){
31+
for(let i = 0 ; i < arr.length; i++ ){
32+
const val = to.get(cur)[i]
33+
from.set(val, from.get(val) -1)
34+
if(from.get(val) === 0){
35+
q.push(val)
36+
from.delete(val)
37+
}
38+
}
39+
}
40+
41+
}
42+
43+
return from.size ===0
44+
};
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* @param {number} numCourses
3+
* @param {number[][]} prerequisites
4+
* @return {number[]}
5+
*/
6+
var findOrder = function(numCourses, prerequisites) {
7+
const from = new Map()
8+
const to = new Map()
9+
const ans =[]
10+
for(let i = 0 ; i < numCourses; i++){
11+
from.set(i, 0)
12+
}
13+
for(let i = 0 ; i < prerequisites.length; i++){
14+
const [a,b] = prerequisites[i]
15+
if(!to.get(b)) to.set(b, [])
16+
to.get(b).push(a)
17+
from.set(a, from.get(a) + 1)
18+
}
19+
const q= []
20+
21+
for(const val of from){
22+
if(val[1] === 0){
23+
q.push(val[0])
24+
from.delete(val[0])
25+
}
26+
}
27+
28+
while(q.length){
29+
const val = q.shift()
30+
ans.push(val)
31+
const arr = to.get(val)
32+
if(arr) {
33+
for(let i = 0 ; i < arr.length; i++){
34+
const value = arr[i]
35+
from.set(value, from.get(value)-1)
36+
if(from.get(value) === 0){
37+
q.push(value)
38+
from.delete(value)
39+
}
40+
}
41+
}
42+
43+
}
44+
return from.size === 0 ? ans : []
45+
};

0 commit comments

Comments
 (0)