210. Course Schedule II
Posted gopanama
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了210. Course Schedule II相关的知识,希望对你有一定的参考价值。
很像图的问题 实际上只用考虑indegree 当indegree等于0的时候 就可以被放进queue 进行bfs 最后能放进n个course就可以返回
1 class Solution { 2 public int[] findOrder(int numCourses, int[][] prerequisites) { 3 if(numCourses == 0) return new int[0]; 4 HashMap<Integer, List<Integer>> graph = new HashMap<>(); 5 int[] indegree = new int[numCourses]; 6 for(int[] pre : prerequisites){ 7 indegree[pre[0]]++; 8 if(!graph.containsKey(pre[1])){ 9 graph.put(pre[1], new ArrayList<>()); 10 } 11 graph.get(pre[1]).add(pre[0]); 12 } 13 Queue<Integer> queue = new LinkedList<>(); 14 List<Integer> res = new ArrayList<>(); 15 for(int i = 0; i < numCourses; i++){ 16 if(indegree[i] == 0){ 17 queue.offer(i); 18 res.add(i); 19 } 20 } 21 22 int size = queue.size(); 23 while(!queue.isEmpty()){ 24 for(int i = 0; i < size; i++){ 25 int course = queue.poll(); 26 if(graph.containsKey(course)){ 27 List<Integer> pairs = graph.get(course); 28 for(int pair : pairs){ 29 indegree[pair]--; 30 if(indegree[pair] == 0){ 31 queue.offer(pair); 32 res.add(pair); 33 } 34 } 35 } 36 37 } 38 size = queue.size(); 39 } 40 int[] arr = new int[numCourses]; 41 if(res.size() == numCourses){ 42 for(int i = 0; i < numCourses; i++){ 43 arr[i] = res.get(i); 44 } 45 return arr; 46 } 47 return new int[0]; 48 } 49 50 }
以上是关于210. Course Schedule II的主要内容,如果未能解决你的问题,请参考以下文章