leetcode210.课程表II
拓扑排序解法
class Solution {public int[] findOrder(int numCourses, int[][] prerequisites) {int[] result = new int[numCourses];Map<Integer, List<Integer>> graph = new HashMap<>();int[] ingrees = new int[numCourses];//1.创建图和顶点入度情况for (int i = 0; i < numCourses; i++) {graph.put(i, new ArrayList<>());}for (int[] prerequisite : prerequisites) {int to = prerequisite[0];int from = prerequisite[1];graph.get(from).add(to);ingrees[to]++;}//2.拓扑排序int count = 0;Queue<Integer> queue = new LinkedList<>();for (int i = 0; i < ingrees.length; i++) {if (ingrees[i] == 0) {queue.offer(i);result[count] = i;count++;}}while (!queue.isEmpty()) {Integer poll = queue.poll();List<Integer> adjList = graph.get(poll);for (Integer adjVertex : adjList) {ingrees[adjVertex]--;if (ingrees[adjVertex] == 0) {result[count] = adjVertex;count++;queue.offer(adjVertex);}}}return count == numCourses ? result : new int[0];}
}