210.course-schedule-ii.go 643 B

12345678910111213141516171819202122232425262728
  1. func findOrder(numCourses int, prerequisites [][]int) []int {
  2. adj := make([][]int, numCourses)
  3. in := make(map[int]int)
  4. for i := 0; i < numCourses; i++ {
  5. in[i] = 0
  6. }
  7. for i := range prerequisites {
  8. adj[prerequisites[i][1]] = append(adj[prerequisites[i][1]], prerequisites[i][0])
  9. in[prerequisites[i][0]]++
  10. }
  11. order := make([]int, 0)
  12. for ring := true; len(in) != 0; ring = true { // Sort by the indegree of nodes
  13. for k, v := range in {
  14. if v == 0 {
  15. ring = false
  16. order = append(order, k)
  17. delete(in, k)
  18. for i := range adj[k] {
  19. in[adj[k][i]]--
  20. }
  21. }
  22. }
  23. if ring {
  24. return []int{}
  25. }
  26. }
  27. return order
  28. }