【leetcode】210. 课程表 II

46 阅读1分钟

leetcode-210.png

这一题和207题一样,只不过207题需要返回是否可以完成(true/false),这一题需要返回其中的一种学习路线。

这里的处理方式和207题一样,都是构建邻接表还有入度表,然后从入度为0的课程入手,然后进行处理

var findOrder = function (numCourses, prerequisites) {
    let map = new Map();
    let indegree = new Array(numCourses).fill(0);

    for (let [after, pre] of prerequisites) {
        indegree[after]++;
        if (!map.has(pre)) map.set(pre, []);
        map.get(pre).push(after);
    }

    // indegree = 0
    let queue = []
    for(let i = 0; i < numCourses; ++i){
        if(indegree[i] === 0) queue.push(i)
    }

    let res = []
    while(queue.length){
        let node = queue.shift()
        res.push(node)
        if(map.get(node)){
            for(let c of map.get(node)){
                indegree[c]--
                if(indegree[c] === 0) queue.push(c)
            }
        }
    }
    return res.length === numCourses ? res : []
};