There are numCourses courses labeled from 0 to numCourses - 1. Each prerequisite pair [a, b] means you must take course b before course a.
Return one valid ordering of every course. If the prerequisite graph contains a cycle, return [].
Input / output
numCourses: int, prerequisites: int[][]int[] containing a valid order, or [] if impossibleExamples
numCourses = 2, prerequisites = [[1, 0]] returns [0, 1].numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[1,2]] returns [0, 2, 1, 3].numCourses = 2, prerequisites = [[1, 0], [0, 1]] returns [] because the cycle makes every order invalid.Constraints
1 <= numCourses <= 20000 <= prerequisites.length <= 50000 <= a, b < numCourses and a != b for every pair [a, b].Edge cases
Target complexity
O(V + E) time and O(V + E) space.Hints
Follow-up How would you detect the cycle with DFS color states instead of Kahn's breadth-first topological sort?