Course Schedule II — Topological Order
Advertisement
Problem
Return any valid order to finish all courses, or empty array if impossible.
Solutions
Python
from collections import deque
class Solution:
def findOrder(self, n: int, prereqs: list[list[int]]) -> list[int]:
adj=[[] for _ in range(n)]; indeg=[0]*n
for a,b in prereqs: adj[b].append(a); indeg[a]+=1
q=deque(i for i in range(n) if indeg[i]==0)
order=[]
while q:
node=q.popleft(); order.append(node)
for nb in adj[node]:
indeg[nb]-=1
if indeg[nb]==0: q.append(nb)
return order if len(order)==n else []
C++
class Solution {
public:
vector<int> findOrder(int n, vector<vector<int>>& pre){
vector<vector<int>> adj(n); vector<int> indeg(n,0);
for(auto& p:pre){adj[p[1]].push_back(p[0]);indeg[p[0]]++;}
queue<int> q; for(int i=0;i<n;i++) if(!indeg[i]) q.push(i);
vector<int> order;
while(!q.empty()){
int u=q.front();q.pop();order.push_back(u);
for(int v:adj[u]) if(!--indeg[v]) q.push(v);
}
return order.size()==n?order:vector<int>{};
}
};
Complexity
- Time: O(V+E) | Space: O(V+E)
Advertisement