拓扑排序
210. 课程表 II
拓扑排序,
BFS
对于入度为0的节点入队列。
出栈时,记录,将对应的节点入度减一。
判断出栈的节点是否是全部节点。
public int[] findOrder(int numCourses, int[][] prerequisites) { int[] input = new int[numCourses]; int[] res = new int[numCourses]; int index = 0; Queue<Integer> queue = new LinkedList<>(); for (int [] edge : prerequisites) { input[edge[0]] ++; } for (int i = 0 ;i <numCourses ;i++) { if(input[i] == 0) queue.add(i); } while(!queue.isEmpty()) { int courses = queue.poll(); res[index++] =courses; for (int [] edge : prerequisites) { if(edge[1] == courses) { input[edge[0]] --; if(input[edge[0]] == 0) queue.add(edge[0]); } } } if(index !=numCourses) return new int[] {}; return res; }
DFS 将队列换成栈即可。
虽然效率不高,但能过。