LeetCode210-课程表II
LeetCode210-课程表II
拓扑排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public static int[] findOrder(int numCourses, int[][] prerequisites) { if (numCourses == 0) return new int[0]; int[] inDegrees = new int[numCourses]; for (int[] p : prerequisites) { inDegrees[p[0]]++; } Queue<Integer> queue = new LinkedList<>(); for (int i = 0; i < inDegrees.length; i++) { if (inDegrees[i] == 0) queue.offer(i); } int count = 0; int[] res = new int[numCourses]; while (!queue.isEmpty()){ int curr = queue.poll(); res[count++] = curr; for (int[] p : prerequisites) { if (p[1] == curr){ inDegrees[p[0]]--; if (inDegrees[p[0]] == 0) queue.offer(p[0]); } } } if (count == numCourses) return res; return new int[0]; }
|