解法
修改一下之前广度优先遍历的解法
代码
import java.util.ArrayList; import java.util.LinkedList; class Solution { public static int[] findOrder(int numCourses, int[][] prerequisites) { //图 ArrayList<ArrayList<Integer>> graph=new ArrayList<>(); LinkedList<Integer> queue=new LinkedList<>(); int[] res=new int[numCourses]; int[] in=new int[numCourses]; //init1 for(int i=0;i<numCourses;i++) { graph.add(new ArrayList<>()); } //初始化图和入度表 for(int i=0;i<prerequisites.length;i++) { in[prerequisites[i][0]]++; graph.get(prerequisites[i][1]).add(prerequisites[i][0]); } int count=0; for(int i=0;i<numCourses;i++) { if(in[i]==0){ queue.addLast(i);//添加的节点 res[count++]=i; } } while(!queue.isEmpty()) { Integer temp = queue.pollFirst(); numCourses--; for(Integer e:graph.get(temp)) { if(--in[e]==0) { queue.addLast(e); res[count++]=e; } } } return numCourses==0?res:new int[]{}; } }