拓扑排序
class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { //统计所有节点的入度 int[] res = new int[numCourses]; int[] in = new int[numCourses]; for(int[] cp : prerequisites) { in[cp[0]]++; } Queue<Integer> q= new LinkedList<>(); for(int i = 0 ; i < numCourses ; i++) { if(in[i] == 0) q.offer(i); } int index = 0 ; while(!q.isEmpty()) { Integer cur = q.poll(); numCourses--; res[index++] = cur; for(int[] cp : prerequisites) { if(cp[1] == cur ) { in[cp[0]] -= 1 ; if(in[cp[0]] == 0) q.offer(cp[0]); } } } if(numCourses == 0)return res; else return new int[0]; } }
原文:https://www.cnblogs.com/swqblog/p/12871524.html