Course Schedule II
The same as I:
public class Solution { /** * @param numCourses a total of n courses * @param prerequisites a list of prerequisite pairs * @return the course order */ public int[] findOrder(int numCourses, int[][] prerequisites) { // Write your code here List[] edges = new ArrayList[numCourses]; int[] degree = new int[numCourses]; int[] rst = new int[numCourses]; for (int i = 0; i < numCourses; i++) { edges[i] = new ArrayList<Integer>(); } for (int i = 0; i < prerequisites.length; i++) { degree[prerequisites[i][0]]++; edges[prerequisites[i][1]].add(prerequisites[i][0]); } Queue<Integer> q = new LinkedList<Integer>(); for (int i = 0; i < numCourses; i++) { if (degree[i] == 0) { q.offer(i); } } int index = 0; while(!q.isEmpty()) { int course = q.poll(); rst[index++] = course; int n = edges[course].size(); for (int i = 0; i < n; i++) { int nextCourse = (int)edges[course].get(i); degree[nextCourse]--; if (degree[nextCourse] == 0) { q.offer(nextCourse); } } } if (index == numCourses) { return rst; } return new int[0]; } }
posted on 2017-06-14 08:50 codingEskimo 阅读(71) 评论(0) 编辑 收藏 举报