Course schedule II

来源:互联网 发布:淘宝热卖网 编辑:程序博客网 时间:2024/06/05 16:31

和course schedule一样的要求,只是要求输出toplogicl排序的结果。一个tricky的地方就是如果没有正常结果,输出new int[0

public class Solution {    public int[] findOrder(int numCourses, int[][] prerequisites) {        int[] result = new int[numCourses];        int resultInd = 0;        int[] indegree = new int[numCourses];        int n = prerequisites.length;        Map<Integer, List<Integer>> nodes = new HashMap<Integer, List<Integer>>();        for (int i = 0; i < n; i++) {            int indegreeNode = prerequisites[i][0];            int outdegreeNode = prerequisites[i][1];            indegree[indegreeNode]++;            if (nodes.get(outdegreeNode) == null) {                nodes.put(outdegreeNode, new ArrayList<Integer>());            }            nodes.get(outdegreeNode).add(indegreeNode);        }        int count = numCourses;        Queue<Integer> queue = new LinkedList<Integer>();        for (int i = 0; i < numCourses; i++) {            if (indegree[i] == 0) {                indegree[i]--;                queue.offer(i);                count--;            }        }        while (!queue.isEmpty()) {            int zeroDegree = queue.poll();            result[resultInd++] = zeroDegree;            List<Integer> list = nodes.get(zeroDegree);            if (list != null) {                for (int i = 0; i < list.size(); i++) {                    int num = list.get(i);                    indegree[num]--;                    if (indegree[num] == 0) {                        indegree[num]--;                        queue.offer(num);                        count--;                    }                }            }        }        return resultInd == numCourses ? result : new int[0]    }}


0 0