LeetCode-210 课程表Ⅱ

拓扑排序

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