現在你總共有 n 門課需要選,記為 0 到 n-1。在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用乙個匹配來表示他們: [0,1]
給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。
可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完成所有課程,返回乙個空陣列。
示例 1
:輸入:2,
[[1,
0]] 輸出:[0
,1]解釋: 總共有 2 門課程。要學習課程 1,你需要先完成課程 0。因此,正確的課程順序為 [0,
1] 。
示例 2
:輸入:4,
[[1,
0],[
2,0]
,[3,
1],[
3,2]
]輸出:[0
,1,2
,3] or [0,
2,1,
3]解釋: 總共有 4 門課程。要學習課程 3,你應該先完成課程 1 和課程 2。並且課程 1 和課程 2 都應該排在課程 0 之後。
因此,乙個正確的課程順序是 [0,
1,2,
3] 。另乙個正確的排序是 [0,
2,1,
3] 。
說明:下面的**是參考官方題解來寫的,一開始不理解陣列indegree的操作為啥不會越界,以為可選的課程會有在n門(0至n-1)之外的,實際是沒有的,給定的n組課程只會是0至n-1這個問題相當於查詢乙個迴圈是否存在於有向圖中。如果存在迴圈,則不存在拓撲排序,因此不可能選取所有課程進行學習。 通過 dfs 進行拓撲排序
class
solution
for(
int i=
0;iint i=0;
while
(!q.
isempty()
)}}}
if(i==numcourses)
return
newint[0
];}}
課程表 iii
leetcode 課程表I,課程表II
課程表 你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse 1 在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?示例 1 輸入 2,1...
leetcode之課程表
你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse 1 在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?示例 1 輸入 2,1,0 輸...
LeetCode題解 207 課程表
現在你總共有 n 門課需要選,記為 0 到 n 1。在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,判斷是否可能完成所有課程的學習?示例 1 輸入 2,1,0 輸出 true 解釋 總共有 2 門課程...