-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcourseSchedule.js
More file actions
45 lines (38 loc) · 1.36 KB
/
courseSchedule.js
File metadata and controls
45 lines (38 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* @param {number} numCourses
* @param {number[][]} prerequisites
* @return {boolean}
*/
var canFinish = function(numCourses, prerequisites) {
let indegreeMap = {};
let adjListMap = {};
for(let itr = 0; itr < prerequisites.length; itr++) {
!adjListMap.hasOwnProperty(prerequisites[itr][1]) && (adjListMap[prerequisites[itr][1]] = []);
adjListMap[prerequisites[itr][1]].push(prerequisites[itr][0]);
!indegreeMap.hasOwnProperty(prerequisites[itr][0]) && (indegreeMap[prerequisites[itr][0]] = 0);
indegreeMap[prerequisites[itr][0]]++;
}
let queue = [];
for(let itr = 0; itr < numCourses; itr++) {
if(!indegreeMap.hasOwnProperty(itr)) {
queue.push(itr);
}
}
// console.log(adjListMap)
// console.log(indegreeMap);
// console.log(queue)
while(queue.length){
let node = queue.shift();
numCourses--;
// print
for(let adjNodeItr = 0; adjNodeItr < (adjListMap.hasOwnProperty(node) ? adjListMap[node].length : -1); adjNodeItr++) {
let adjNode = adjListMap[node][adjNodeItr]
indegreeMap[adjNode]--;
if(indegreeMap[adjNode] == 0) {
queue.push(adjNode);
}
}
}
return numCourses == 0;
};
//https://leetcode.com/problems/course-schedule/