210. Course Schedule II

Medium
其實刪入度的那個方法就是Kahn's algorithm.所以基本上這類題我是會了。

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        int[] res = new int[numCourses]; 
        Map<Integer, Set<Integer>> neighbors = new HashMap<>();
        Map<Integer, Integer> indegree = new HashMap<>();
        for (int i = 0; i < numCourses; i++){
            indegree.put(i, 0);
        }
        for (int[] prerequisite : prerequisites){
            neighbors.put(prerequisite[1], new HashSet<Integer>());
            indegree.put(prerequisite[0], indegree.get(prerequisite[0]) + 1);
        }
        for (int[] prerequisite : prerequisites){
            neighbors.get(prerequisite[1]).add(prerequisite[0]);
        }
        Queue<Integer> queue = new LinkedList<>();
        for (Integer i : indegree.keySet()){
            if (indegree.get(i) == 0){
                queue.offer(i);
            }    
        }
        int index = 0;
        int count = 0;
        while(!queue.isEmpty()){
            Integer i = queue.poll();
            count++;
            res[index++] = i;
            if (neighbors.containsKey(i)){
                for (Integer nei : neighbors.get(i)){
                    indegree.put(nei, indegree.get(nei) - 1);
                    if (indegree.get(nei) == 0){
                        queue.offer(nei);
                    }
                }
            }
        }
        if (count != numCourses){
            return new int[]{};
        }
        return res;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容