Course Schedule II
这是一道典型的拓扑问题。所以我们可以根据拓扑模型来完成这道题。这里面我们需要知道每个课程的入度和每个课程修完后可以解锁的课程。在这里需要注意的是因为课程从0到n-1,所以直接用index就可以做Key,不需要用到hash。这道题因为使用了入读,所以不用分级。因为入读已经帮我们把级分好。
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]; 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> queue = new LinkedList<Integer>(); for (int i = 0; i < numCourses; i++) { if (degree[i] == 0) { queue.offer(i); } } int[] result = new int[numCourses]; int count = 0; while (!queue.isEmpty()) { int preClass = queue.poll(); result[count] = preClass; count++; int n = edges[preClass].size(); for (int i = 0; i < n; i++) { int pointClass = (int)edges[preClass].get(i); degree[pointClass]--; if (degree[pointClass] == 0) { queue.offer(pointClass); } } } if (count == numCourses) { return result; } return new int[0]; } }
posted on 2017-03-21 12:34 codingEskimo 阅读(94) 评论(0) 收藏 举报