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 }

 

posted @ 2018-10-29 06:44  jasoncool1  阅读(90)  评论(0编辑  收藏  举报