func findOrder(numCourses int, prerequisites [][]int) []int { adj := make([][]int, numCourses) in := make(map[int]int) for i := 0; i < numCourses; i++ { in[i] = 0 } for i := range prerequisites { adj[prerequisites[i][1]] = append(adj[prerequisites[i][1]], prerequisites[i][0]) in[prerequisites[i][0]]++ } order := make([]int, 0) for ring := true; len(in) != 0; ring = true { // Sort by the indegree of nodes for k, v := range in { if v == 0 { ring = false order = append(order, k) delete(in, k) for i := range adj[k] { in[adj[k][i]]-- } } } if ring { return []int{} } } return order }