Leetcode 210. Course Schedule II

来源:互联网 发布:java 线程池原理 编辑:程序博客网 时间:2024/06/05 08:55
public class Solution {    public int[] findOrder(int numCourses, int[][] prerequisites) {        int[] ret = new int[numCourses];        HashMap<Integer, HashSet<Integer>> graph = buildGraph(prerequisites);                HashMap<Integer, Integer> map = new HashMap<>();        for (Integer node : graph.keySet()) {            for (Integer neighbor : graph.get(node)) {                if (map.containsKey(neighbor)) {                    map.put(neighbor, map.get(neighbor)+1);                } else {                    map.put(neighbor, 1);                }            }        }                Queue<Integer> queue = new LinkedList<>();        HashSet<Integer> set = new HashSet<>();        for (int i=0; i<numCourses; i++) {            if (!map.containsKey(i)) {                queue.offer(i);                set.add(i);            }        }                int count = 0;        while (!queue.isEmpty()) {            Integer node = queue.poll();            ret[count++] = node;            HashSet<Integer> neighbors = graph.get(node);            if (neighbors != null) {                for (Integer neighbor : neighbors) {                    map.put(neighbor, map.get(neighbor)-1);                    if (map.get(neighbor) == 0) {                        queue.offer(neighbor);                        set.add(neighbor);                    }                }            }        }                if (count == numCourses) {            return ret;        }                return new int[]{};    }        private static HashMap<Integer, HashSet<Integer>> buildGraph(int[][] prerequisites) {        HashMap<Integer, HashSet<Integer>> graph = new HashMap<Integer, HashSet<Integer>>();                for (int i=0; i<prerequisites.length; i++) {            if (graph.containsKey(prerequisites[i][1])) {                graph.get(prerequisites[i][1]).add(prerequisites[i][0]);            } else {                HashSet<Integer> neighbor = new HashSet<>();                neighbor.add(prerequisites[i][0]);                graph.put(prerequisites[i][1], neighbor);            }        }                return graph;    }}

0 0
原创粉丝点击