210. 课程表 II(图)(拓扑排序)

210. 课程表 II(图)(拓扑排序)_第1张图片
方法同 LeetCode .207
入度BFS
只是多加了一个输出队列移除的值得操作;

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        int[] inDegree = new int[numCourses];
        for(int[]node:prerequisites){
            inDegree[node[0]]++;
        }
        LinkedList<Integer> queue = new LinkedList<>();
        for(int i = 0;i<numCourses;i++){
            if(inDegree[i]==0) queue.add(i);
        }
        int[] res = new int[numCourses];
        int cnt = 0;
        while(!queue.isEmpty()){
            int cur = queue.removeFirst();
            numCourses--;
            res[cnt] = cur;
            cnt++;
            for(int[] node:prerequisites){
                if(node[1]!=cur) continue;
                if(--inDegree[node[0]] == 0) queue.add(node[0]);
            }
        }

        if(numCourses==0)
            return res;
        else
            return new int[0];//如果不是一个拓扑排序返回数组 [];
        
    }
}

你可能感兴趣的:(#,图)