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
- [leetcode] 210.Course Schedule II
- Leetcode 210. Course Schedule II
- 210. Course Schedule II LeetCode
- leetcode 210. Course Schedule II
- LeetCode *** 210. Course Schedule II
- leetcode.210. Course Schedule II
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- Leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- Leetcode 210. Course Schedule II
- [LeetCode]210. Course Schedule II
- leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- [leetcode]210. Course Schedule II
- leetcode 210. Course Schedule II
- VTK修炼之道75:交互部件_测量类Widget的应用
- 一个很棒的BeautifulSoup 的中文文档
- base64加密解密工具类
- Android:学习AIDL,这一篇文章就够了(下)
- android string.xml中添加特殊字符
- Leetcode 210. Course Schedule II
- Android bluetooth设备状态监听
- sqlserver varbinary to base64
- IcoMoon图标字体
- mysql数据库优化
- System.nanoTime()和System.currentTimeMillis()区别 (还是直接看API比较清晰)
- Android Studio或Eclipse找不到逍遥安卓模拟器解决办法
- 音乐| 冥想音乐推荐
- 非空判定工具类