public int[] findOrder(int numCourses, int[][] prerequisites) {int[] ans = new int[numCourses];for (int i = 0; i < numCourses; i++) {ans[i] = i;}if (prerequisites == null || prerequisites.length == 0) {return ans;}HashMap<Integer, Node> nodes = new HashMap<>();// 先把图建好for (int[] prerequisite : prerequisites) {int to = prerequisite[0];int from = prerequisite[1];if (!nodes.containsKey(to)) {nodes.put(to, new Node(to));}if (!nodes.containsKey(from)) {nodes.put(from, new Node(from));}Node t = nodes.get(to);Node f = nodes.get(from);f.nexts.add(t);t.in++;}int needNum = nodes.size();Queue<Node> zeroInQueue = new LinkedList<>();int index = 0;for (int i = 0; i < numCourses; i++) {if (!nodes.containsKey(i)) {ans[index++] = i;} else {if (nodes.get(i).in == 0) {zeroInQueue.add(nodes.get(i));}}}int count = 0;while (!zeroInQueue.isEmpty()) {Node cur = zeroInQueue.poll();ans[index++] = cur.name;count++;for (Node next : cur.nexts) {if (--next.in == 0) {zeroInQueue.add(next);}}}return count == needNum ? ans : new int[0];}// 一个node,就是一个课程// name是课程的编号// in是课程的入度public static class Node {public int name;public int in;public ArrayList<Node> nexts;public Node(int n) {name = n;in = 0;nexts = new ArrayList<>();}}
