Course Schedule II leetcode java 走地牙
/* 1 建立list陣列 存放 基礎課程的後續課程, 2 建立int陣列 存放 後續課程需要的基礎課程數量; 3 建立queue 用於bfs 把基礎課程放入queue 每層bfs 找出 基礎課程的後續可能 若其需要基礎課程的數量為0 則 推入queue中,並且寫入result; */ class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { int[] result = new int[numCourses]; List[] postCourse = new ArrayList[numCourses]; int[] reqNum = new int[numCourses]; Queue<Integer> q = new LinkedList<>(); for(int i = 0; i < numCourses; i++) { postCourse[i] = new ArrayList<Integer>(); } for(int i = 0; i < prerequisites.length; i++) { postCourse[prerequisites[i][1]].add(prerequisites[i][0]); reqNum[prerequisites[i][0]]++; } for(int i = 0; i < numCourses; i++) { if(reqNum[i] == 0) { q.offer(i); } } int count = 0; while(!q.isEmpty()) { int temp = q.poll(); result[count++] = temp; for(int i = 0; i < postCourse[temp].size(); i++) { reqNum[(int)postCourse[temp].get(i)]--; if(reqNum[(int)postCourse[temp].get(i)] == 0) { q.offer((int)postCourse[temp].get(i)); } } } if(count == numCourses) { return result; } return new int[0]; } }