国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【圖論】Leetcode 207. 課程表【中等】

這篇具有很好參考價(jià)值的文章主要介紹了【圖論】Leetcode 207. 課程表【中等】。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

課程表

你這個(gè)學(xué)期必須選修 numCourses 門課程,記為 0 到 numCourses - 1 。

在選修某些課程之前需要一些先修課程。 先修課程按數(shù)組 prerequisites 給出,其中 prerequisites[i] = [ai, bi] ,表示如果要學(xué)習(xí)課程 ai 則 必須 先學(xué)習(xí)課程 bi 。

  • 例如,先修課程對 [0, 1] 表示:想要學(xué)習(xí)課程 0 ,你需要先完成課程 1 。
    請你判斷是否可能完成所有課程的學(xué)習(xí)?如果可以,返回 true ;否則,返回 false 。

示例1:

輸入: numCourses = 2, prerequisites = [[1,0]]
輸出: true
解釋:總共有 2 門課程。學(xué)習(xí)課程 1 之前,你需要完成課程 0 。這是可能的。

解題思路

  • 這個(gè)問題可以轉(zhuǎn)化為判斷有向圖中是否存在環(huán)的問題,如果存在環(huán),
    則說明存在課程之間的循環(huán)依賴,無法完成所有課程的學(xué)習(xí);
    如果不存在環(huán),則說明不存在循環(huán)依賴,可以完成所有課程的學(xué)習(xí)。

  • 1、使用拓?fù)渑判騺砼袛嗍欠翊嬖诃h(huán),即是否可以完成所有課程的學(xué)習(xí)。

  • 2、使用鄰接表來表示課程之間的先修關(guān)系。

  • 3、統(tǒng)計(jì)每門課程的入度,入度為0表示沒有先修課程。

  • 4、將入度為0的課程加入隊(duì)列,并從隊(duì)列中依次彈出課程,將其后繼課程的入度減1。

  • 5、如果存在環(huán),即存在入度為0的課程無法全部彈出,則說明無法完成所有課程的學(xué)習(xí),返回false;否則返回true。

Java實(shí)現(xiàn)

廣度優(yōu)先搜索(BFS)實(shí)現(xiàn)

public class CourseSchedule {

    public boolean canFinish(int numCourses, int[][] prerequisites) {
        // 構(gòu)建有向圖和入度數(shù)組
        Map<Integer, List<Integer>> graph = new HashMap<>();
        int[] indegree = new int[numCourses];
        for (int[] prereq : prerequisites) {
            int course = prereq[0];
            int prereqCourse = prereq[1];
            graph.putIfAbsent(prereqCourse, new ArrayList<>());
            graph.get(prereqCourse).add(course);
            indegree[course]++;
        }
        
        // 將入度為 0 的節(jié)點(diǎn)加入隊(duì)列中
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < numCourses; i++) {
            if (indegree[i] == 0) {
                queue.offer(i);
            }
        }
        
        // 使用廣度優(yōu)先搜索進(jìn)行拓?fù)渑判?/span>
        int visited = 0;
        while (!queue.isEmpty()) {
            int course = queue.poll();
            visited++;
            List<Integer> neighbors = graph.getOrDefault(course, new ArrayList<>());
            for (int neighbor : neighbors) {
                indegree[neighbor]--;
                if (indegree[neighbor] == 0) {
                    queue.offer(neighbor);
                }
            }
        }
        
        return visited == numCourses;
    }

    public static void main(String[] args) {
        CourseSchedule scheduler = new CourseSchedule();
        int numCourses = 4;
//        int[][] prerequisites = {{1, 0}, {2, 1}, {3, 2}, {3, 1}};
        int[][] prerequisites = {{1, 0}, {2, 1}, {3, 2}, {1, 3}};
        System.out.println(scheduler.canFinish(numCourses, prerequisites));
    }
}

時(shí)間空間復(fù)雜度

  • 時(shí)間復(fù)雜度:O(V + E),其中 V 表示課程數(shù)量,E 表示先修課程的數(shù)量,因?yàn)樾枰獦?gòu)建鄰接表和統(tǒng)計(jì)入度,以及進(jìn)行BFS拓?fù)渑判颉?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-851570.html

  • 空間復(fù)雜度:O(V + E),其中 V 表示課程數(shù)量,E 表示先修課程的數(shù)量,因?yàn)樾枰鎯?chǔ)鄰接表和入度數(shù)組。文章來源地址http://www.zghlxwxcb.cn/news/detail-851570.html

到了這里,關(guān)于【圖論】Leetcode 207. 課程表【中等】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【LeetCode】210. 課程表 II——拓?fù)渑判? decoding=
  • 【LeetCode: 210. 課程表 II:拓?fù)渑判?圖】

    【LeetCode: 210. 課程表 II:拓?fù)渑判?圖】

    ?? 算法題 ?? ?? 算法刷題專欄 | 面試必備算法 | 面試高頻算法 ?? ?? 越難的東西,越要努力堅(jiān)持,因?yàn)樗哂泻芨叩膬r(jià)值,算法就是這樣? ?? 作者簡介:碩風(fēng)和煒,CSDN-Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者??,保研|國家獎(jiǎng)學(xué)金|高中學(xué)習(xí)JAVA|大學(xué)完善JAVA開發(fā)技術(shù)棧|面試刷題|面經(jīng)八股文

    2024年02月09日
    瀏覽(28)
  • LeetCode 0630.課程表 III:貪心 + 優(yōu)先隊(duì)列

    力扣題目鏈接:https://leetcode.cn/problems/course-schedule-iii/ 這里有 n 門不同的在線課程,按從 1 到 n ?編號(hào)。給你一個(gè)數(shù)組 courses ,其中 courses[i] = [duration i , lastDay i ] 表示第 i 門課將會(huì) 持續(xù) 上 duration i 天課,并且必須在不晚于 lastDay i 的時(shí)候完成。 你的學(xué)期從第 1 天開始。且不能

    2024年02月09日
    瀏覽(20)
  • 2023-09-09 LeetCode每日一題(課程表)

    2023-09-09 LeetCode每日一題(課程表)

    點(diǎn)擊跳轉(zhuǎn)到題目位置 你這個(gè)學(xué)期必須選修 numCourses 門課程,記為 0 到 numCourses - 1 。 在選修某些課程之前需要一些先修課程。 先修課程按數(shù)組 prerequisites 給出,其中 prerequisites[i] = [ai, bi] ,表示如果要學(xué)習(xí)課程 ai 則 必須 先學(xué)習(xí)課程 bi 。 例如,先修課程對 [0, 1] 表示:想要學(xué)

    2024年02月09日
    瀏覽(20)
  • 2023-09-10 LeetCode每日一題(課程表 II)

    2023-09-10 LeetCode每日一題(課程表 II)

    點(diǎn)擊跳轉(zhuǎn)到題目位置 現(xiàn)在你總共有 numCourses 門課需要選,記為 0 到 numCourses - 1。給你一個(gè)數(shù)組 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在選修課程 ai 前 必須 先選修 bi 。 例如,想要學(xué)習(xí)課程 0 ,你需要先完成課程 1 ,我們用一個(gè)匹配來表示:[0,1] 。 返回你為了學(xué)完所

    2024年02月09日
    瀏覽(25)
  • 2023-09-11 LeetCode每日一題(課程表 III)

    2023-09-11 LeetCode每日一題(課程表 III)

    點(diǎn)擊跳轉(zhuǎn)到題目位置 這里有 n 門不同的在線課程,按從 1 到 n 編號(hào)。給你一個(gè)數(shù)組 courses ,其中 courses[i] = [durationi, lastDayi] 表示第 i 門課將會(huì) 持續(xù) 上 durationi 天課,并且必須在不晚于 lastDayi 的時(shí)候完成。 你的學(xué)期從第 1 天開始。且不能同時(shí)修讀兩門及兩門以上的課程。 返

    2024年02月09日
    瀏覽(21)
  • 【LeetCode熱題100】打卡第38天:課程表&實(shí)現(xiàn)前綴樹

    【LeetCode熱題100】打卡第38天:課程表&實(shí)現(xiàn)前綴樹

    大家好,我是知識(shí)汲取者,歡迎來到我的LeetCode熱題100刷題專欄! 精選 100 道力扣(LeetCode)上最熱門的題目,適合初識(shí)算法與數(shù)據(jù)結(jié)構(gòu)的新手和想要在短時(shí)間內(nèi)高效提升的人,熟練掌握這 100 道題,你就已經(jīng)具備了在代碼世界通行的基本能力。在此專欄中,我們將會(huì)涵蓋各種

    2024年02月17日
    瀏覽(16)
  • 刷題筆記25——圖論課程表

    為了最終理解你所不理解的,你必須經(jīng)歷一條愚昧無知的道路。為了占有你從未占有的東西,你必須經(jīng)歷被剝奪的道路。為了達(dá)到你現(xiàn)在所不在的名位,你必須經(jīng)歷那條你不在其中的道路?!蕴?非常奇妙,我最初的錯(cuò)誤是如下,在找到目標(biāo)節(jié)點(diǎn)后直接加入到res中,但是

    2024年02月07日
    瀏覽(12)
  • 想要精通算法和SQL的成長之路 - 課程表II

    想要精通算法和SQL的成長之路 - 課程表II

    想要精通算法和SQL的成長之路 - 系列導(dǎo)航 原題鏈接 核心知識(shí): 拓?fù)渑判蚴菍iT 應(yīng)用于有向圖的算法。 BFS 的寫法就叫拓?fù)渑判?,核心就是?讓入度為0的節(jié)點(diǎn)入隊(duì)。 拓?fù)渑判虻?結(jié)果不唯一。 同時(shí)拓?fù)渑判蛴幸粋€(gè)重要的功能: 能夠檢測有向圖中是否存在環(huán)。 我們先分析一下

    2024年02月09日
    瀏覽(18)
  • 自制課程表小程序

    自制課程表小程序

    微信開發(fā)者工具:穩(wěn)定版 Stable Build 根據(jù)自己電腦的系統(tǒng)下載對應(yīng)的版本 完整代碼連接: https://pan.baidu.com/s/1VbgPOS6CUOae8vg2axhGIg?pwd=hk9e 提取碼:hk9e 先把完整代碼的壓縮包解壓,并記住這個(gè)路徑,后面要用 1.打開下載好的微信開發(fā)工具, 注意不要用游客登錄 ,我一開始就是游客

    2024年02月09日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包