日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--210.课程表Ⅱ

發(fā)布時(shí)間:2024/7/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--210.课程表Ⅱ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)在你總共有 n 門(mén)課需要選,記為?0?到?n-1。

在選修某些課程之前需要一些先修課程。?例如,想要學(xué)習(xí)課程 0 ,你需要先完成課程?1 ,我們用一個(gè)匹配來(lái)表示他們: [0,1]

給定課程總量以及它們的先決條件,返回你為了學(xué)完所有課程所安排的學(xué)習(xí)順序。

可能會(huì)有多個(gè)正確的順序,你只要返回一種就可以了。如果不可能完成所有課程,返回一個(gè)空數(shù)組。

示例?1:

輸入: 2, [[1,0]]?
輸出: [0,1]
解釋:?總共有 2 門(mén)課程。要學(xué)習(xí)課程 1,你需要先完成課程 0。因此,正確的課程順序?yàn)?[0,1] 。
示例?2:

輸入: 4, [[1,0],[2,0],[3,1],[3,2]]
輸出: [0,1,2,3] or [0,2,1,3]
解釋:?總共有 4 門(mén)課程。要學(xué)習(xí)課程 3,你應(yīng)該先完成課程 1 和課程 2。并且課程 1 和課程 2 都應(yīng)該排在課程 0 之后。
?? ? 因此,一個(gè)正確的課程順序是?[0,1,2,3] 。另一個(gè)正確的排序是?[0,2,1,3] 。
說(shuō)明:

輸入的先決條件是由邊緣列表表示的圖形,而不是鄰接矩陣。詳情請(qǐng)參見(jiàn)圖的表示法。
你可以假定輸入的先決條件中沒(méi)有重復(fù)的邊。
提示:

這個(gè)問(wèn)題相當(dāng)于查找一個(gè)循環(huán)是否存在于有向圖中。如果存在循環(huán),則不存在拓?fù)渑判?#xff0c;因此不可能選取所有課程進(jìn)行學(xué)習(xí)。
通過(guò) DFS 進(jìn)行拓?fù)渑判?- 一個(gè)關(guān)于Coursera的精彩視頻教程(21分鐘),介紹拓?fù)渑判虻幕靖拍睢?br /> 拓?fù)渑判蛞部梢酝ㄟ^(guò)?BFS?完成。

?

思路:拓?fù)渑判?/p>

?

代碼:

class?Solution?{

????public?int[]?findOrder(int?numCourses,?int[][]?prerequisites)?{

????????List<Integer>?lists[]?=?new?ArrayList[numCourses];//記錄某個(gè)節(jié)點(diǎn)可以到達(dá)的節(jié)點(diǎn)集合

????????int?invalue[]?=?new?int[numCourses];//記錄每個(gè)節(jié)點(diǎn)的入度

????????for(int?i=0;i<prerequisites.length;i++){

????????????invalue[prerequisites[i][0]]++;

????????????if(lists[prerequisites[i][1]]==null){

????????????????lists[prerequisites[i][1]]?=?new?ArrayList<>();

????????????}

????????????lists[prerequisites[i][1]].add(prerequisites[i][0]);

????????}

????????Queue<Integer>?queue?=?new?LinkedList<>();

????????for(int?i=0;i<numCourses;i++){

????????????if(invalue[i]==0){

????????????????queue.add(i);

????????????}

????????}

????????int?result[]?=?new?int[numCourses];

????????int?count=0;

????????while(!queue.isEmpty()){

????????????int?size?=?queue.size();

????????????while(size-->0){

????????????????int?t?=?queue.poll();

????????????????result[count++]=t;

????????????????if(lists[t]==null)?continue;

????????????????for(int?i=0;i<lists[t].size();i++){

????????????????????invalue[lists[t].get(i)]--;

????????????????????if(invalue[lists[t].get(i)]==0){

????????????????????????queue.add(lists[t].get(i));

????????????????????}

????????????????}

????????????}

????????}

????????if(count==numCourses)?return?result;

????????else?return?new?int[0];

?

????}

}

總結(jié)

以上是生活随笔為你收集整理的Leetcode--210.课程表Ⅱ的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。