解法

修改一下之前广度优先遍历的解法

代码

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[]{};
    }
}