Jack Li's Blog

0210. Course Schedule II

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>> graph(numCourses);
        vector<int> indegree(numCourses);
        vector<int> result;
        queue<int> que;

        for(auto& pre : prerequisites) {
            graph[pre[1]].push_back(pre[0]);
            indegree[pre[0]]++;
        }

        for(int i = 0; i < numCourses; i++) {
            if(indegree[i] == 0) que.push(i);
        }

        if(que.empty() == true) return {};

        int nodeVisited = 0;
        while(que.empty() == false) {
            int current = que.front();
            que.pop();
            nodeVisited++;
            result.push_back(current);

            for(auto& edge : graph[current]) {
                indegree[edge]--;
                if(indegree[edge] == 0) que.push(edge);
            }
        }

        if(nodeVisited != numCourses) return {};
        return result;
    }
};