lc-go/solutions/2/q210/solution.go
2026-01-15 14:57:22 +09:00

34 lines
626 B
Go

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