210. Course Schedule II
class Solution {
public:
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int> inDegs(numCourses,0);
unordered_map<int,unordered_set<int>> adjList;
queue<int> courseQueue;
vector<int> ret;
for(auto p:prerequisites){
inDegs[p.first]++;
adjList[p.second].insert(p.first);
}
for(int i =0;i<inDegs.size();++i){
if(inDegs[i]==0) courseQueue.push(i);
}
while(!courseQueue.empty()){
int cur = courseQueue.front();
courseQueue.pop();
ret.push_back(cur);
for(int n : adjList[cur]){
inDegs[n]--;
if(inDegs[n]==0){
courseQueue.push(n);
}
}
}
return ret.size() == numCourses? ret: vector<int>();
}
};