package q210 func findOrder(numCourses int, prerequisites [][]int) []int { ndeps := make([]int, numCourses) revDeps := make([][]int, numCourses) ret := make([]int, 0, numCourses) for i := range prerequisites { c, dep := prerequisites[i][0], prerequisites[i][1] ndeps[c]++ revDeps[dep] = append(revDeps[dep], c) } for i := range ndeps { if ndeps[i] == 0 { ret = append(ret, i) } } for i := 0; i < len(ret); i++ { for _, c := range revDeps[ret[i]] { ndeps[c]-- if ndeps[c] == 0 { ret = append(ret, c) } } } if len(ret) != numCourses { return nil } return ret } var _ = findOrder