Course Schedule II
2, [[1,0]]4, [[1,0],[2,0],[3,1],[3,2]]class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
Map<Integer, List<Integer>> neighbors = new HashMap<Integer, List<Integer>>();//node and its neighbors
Queue<Integer> q = new LinkedList<Integer>();//bfs
int[] indegree = new int[numCourses];//indegree出度
int[] ret = new int[numCourses];
for(int[] p : prerequisites){
indegree[p[0]] ++;
if(neighbors.containsKey(p[1])){
neighbors.get(p[1]).add(p[0]);
}else{
List<Integer> ns = new ArrayList<Integer>();
ns.add(p[0]);
neighbors.put(p[1], ns);
}
}
for(int i = 0; i < indegree.length; i ++){
if(indegree[i] == 0){
q.offer(i);
}
}
int visited = 0;
while(!q.isEmpty()){
int cur = q.poll();
ret[visited ++] = cur;
if(neighbors.containsKey(cur)){
for(int i : neighbors.get(cur)){
indegree[i] --;
if(indegree[i] == 0){
q.offer(i);
}
}
}
}
return visited == numCourses ? ret : new int[0];
}
}Last updated