leetcode 210. 课程表 II

182 阅读1分钟

c++

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        vector<int> indegree(numCourses, 0);
        vector<vector<int>> edge(numCourses);
        queue<int> que;
        for (auto x : prerequisites) {
            indegree[x[0]]++;
            edge[x[1]].push_back(x[0]);
        }
        for (int i = 0; i < numCourses; i++) if (indegree[i] == 0) que.push(i);
        vector<int> ans;
        while (!que.empty()) {
            int course = que.front();
            que.pop();
            ans.push_back(course);
            for (auto x : edge[course]) {
                indegree[x]--;
                if (indegree[x] == 0) que.push(x);
            } 
        }
        if (ans.size() == numCourses) return ans;
        return vector<int>();
    }
};

js

var findOrder = function(numCourses, prerequisites) {
    var indegree = new Array(numCourses).fill(0);
    var edge = new Array(numCourses).fill(0).map(() => new Array());
    var que = [];
    for (var x of prerequisites) {
        indegree[x[0]]++;
        edge[x[1]].push(x[0]);
    }
    for (var i = 0; i < numCourses; i++) {
        if (indegree[i] == 0) que.push(i);
    }
    var ans = [];
    while (que.length != 0) {
        var ind = que.shift();
        ans.push(ind);
        for (var x of edge[ind]) {
            indegree[x]--;
            if (indegree[x] == 0) que.push(x);
        }
    }
    if (ans.length == numCourses) return ans;
    return [];
};