Kahn's with a min-heap
Time O(V log V + E) Space O(V + E)In-degrees, a PriorityQueue of ready courses, and an output array. Return [] if fewer than n courses are output.
import java.util.*;
class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
List<List<Integer>> adj = new ArrayList<>();
for (int i = 0; i < numCourses; i++) adj.add(new ArrayList<>());
int[] indeg = new int[numCourses];
for (int[] p : prerequisites) { adj.get(p[1]).add(p[0]); indeg[p[0]]++; }
PriorityQueue<Integer> ready = new PriorityQueue<>();
for (int i = 0; i < numCourses; i++) if (indeg[i] == 0) ready.offer(i);
int[] order = new int[numCourses];
int k = 0;
while (!ready.isEmpty()) {
int u = ready.poll();
order[k++] = u;
for (int v : adj.get(u)) if (--indeg[v] == 0) ready.offer(v);
}
return k == numCourses ? order : new int[0];
}
}Verdict: A plain queue gives a valid order in O(V + E) when any order is accepted.