做外包胡it網(wǎng)站有哪些網(wǎng)頁(yè)設(shè)計(jì)公司
學(xué)會(huì)拓?fù)渑判蝾}目的基本解法
- res數(shù)組 記錄上課順序
- g 記錄學(xué)了課程i 能解鎖的課程j
- indeg 記錄每個(gè)課程的入度
- q 記錄入度為0的課程 for循環(huán)q去解放其他課程
本題來(lái)自力扣課程表
func findOrder(numCourses int, prerequisites [][]int) []int {res := []int{}//建一個(gè)二維數(shù)組記錄每個(gè)課程的依賴關(guān)系g := make([][]int,numCourses)//記錄每個(gè)結(jié)點(diǎn)入度的數(shù)組indeg := make([]int,numCourses)//處理關(guān)系 //記錄入度 //記錄某個(gè)課程學(xué)了之后能減少哪個(gè)課程的入度for _,v := range prerequisites {in := v[1]out := v[0]g[in] = append(g[in],out)indeg[out]++}//入度為0的結(jié)點(diǎn)進(jìn)入隊(duì)列q := []int{}for i := range indeg {if indeg[i] == 0 {q = append(q,i)}}//遍歷入度為0的結(jié)點(diǎn) 解放入度不為0的結(jié)點(diǎn)for len(q) > 0 {node := q[0]q = q[1:]res = append(res,node)for _,v := range g[node] {indeg[v]--if indeg[v] == 0 {q = append(q,v)}}}//結(jié)果數(shù)組和課程數(shù)量不同if len(res) != numCourses {return []int{}}return res
}```