leetcode 課程表I,課程表II

2021-10-06 06:46:01 字數 2221 閱讀 8972

課程表:

你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse-1 。在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用乙個匹配來表示他們:[0,1]。給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?

示例 1:

輸入: 2, [[1,0]] 

輸出: true

解釋: 總共有 2 門課程。學習課程 1 之前,你需要完成課程 0。所以這是可能的。

示例 2:

輸入: 2, [[1,0],[0,1]]

輸出: false

解釋: 總共有 2 門課程。學習課程 1 之前,你需要先完成​課程 0;並且學習課程 0 之前,你還應先完成課程 1。這是不可能的。

輸入的先決條件是由 邊緣列表 表示的圖形,而不是鄰接矩陣 。 你可以假定輸入的先決條件中沒有重複的邊。 1 <= numcourses <=

10^5

思路:利用入度表和鄰接表進行拓撲排序

1.首先用乙個入度表來儲存所有課程的入度,用鄰接表儲存每種課程的後繼課程

2.將所有入度為0,即不需要先決條件的課程放入佇列中

3.當佇列中有元素時,將隊首元素出隊,用count表示已經學習過的課程,沒有乙個出隊,count++,然後所有出邊的入度減1,此時判斷是否有入度為0,如果是則入隊

4.當隊列為空時,意味著所有能學的課程學完,此時返回count==numcourse,即是否能夠學完

課程表ii:

現在你總共有 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] 。

說明:

這個問題相當於查詢乙個迴圈是否存在於有向圖中。如果存在迴圈,則不存在拓撲排序,因此不可能選取所有課程進行學習。 通過 dfs 進行拓撲排序

此題於上一題相近,只需在出隊時將該元素放入返回值中即可

class

solution

for(

int i=

0;isize()

;i++

) queue<

int> myque;

int count=0;

for(

int i=

0;i)while

(!myque.

empty()

)}return count==numcourses?ans:vector<

int>()

;}};

leetcode之課程表

你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse 1 在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?示例 1 輸入 2,1,0 輸...

html課程表頁面

效果圖 html 部分 charset utf 8 課程表title align center 課程表h2 caption class info align center valign middle 專案td colspan 5 align center valign middle 上課td col...

機器學習課程表

1.第一階段 基礎入門 3 6個月 入門的第一步是學習一些經典課程並配套經典書籍,一般來說這個過程在半年之內比較合適。在這個部分我介紹的課程和書籍都屬於難度非常低的,對數學和程式設計都沒什麼太大的要求。1.1.吳恩達cousera機器學習課程 1.2.python機器學習 introduction ...