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 [];
};