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

LeetCode:207. 課程表、210. 課程表 II(拓?fù)渑判?C++)

這篇具有很好參考價(jià)值的文章主要介紹了LeetCode:207. 課程表、210. 課程表 II(拓?fù)渑判?C++)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

207. 課程表

題目描述:

實(shí)現(xiàn)代碼與解析:

拓?fù)渑判?/p>

210. 課程表 II

題目描述:

實(shí)現(xiàn)代碼與解析:

拓?fù)渑判?/p>

原理思路:


207. 課程表

題目描述:

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

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

  • 例如,先修課程對(duì)?[0, 1]?表示:想要學(xué)習(xí)課程?0?,你需要先完成課程?1?。

請(qǐng)你判斷是否可能完成所有課程的學(xué)習(xí)?如果可以,返回?true?;否則,返回?false?。????????

示例 1:

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

示例 2:

輸入:numCourses = 2, prerequisites = [[1,0],[0,1]]
輸出:false
解釋:總共有 2 門課程。學(xué)習(xí)課程 1 之前,你需要先完成?課程 0 ;并且學(xué)習(xí)課程 0 之前,你還應(yīng)先完成課程 1 。這是不可能的。

提示:

  • 1 <= numCourses <= 2000
  • 0 <= prerequisites.length <= 5000
  • prerequisites[i].length == 2
  • 0 <= ai, bi < numCourses
  • prerequisites[i]?中的所有課程對(duì)?互不相同

實(shí)現(xiàn)代碼與解析:

拓?fù)渑判?/strong>

class Solution {
public:
    vector<int> h = vector<int>(2010, -1), e = vector<int>(20010, 0), ne = vector<int>(20010, 0), d = vector<int>(2010, 0);
    int idx = 0, cnt = 0;

    void add(int a, int b)
    {
        e[idx] = b; ne[idx] = h[a]; h[a] = idx++;
    }

    // 拓?fù)渑判?    bool topsort(int n)
    {
        queue<int> q; // 隊(duì)列
        
        for (int i = 0; i < n; i++)
            if (d[i] == 0) q.push(i); // 入度為 0的入隊(duì)
            
        while(q.size())
        {
            int t = q.front();
            cnt++;
            q.pop();          
            // bfs
            for (int i = h[t]; ~i; i = ne[i])
            {
                int j = e[i];
                d[j]--; // 此節(jié)點(diǎn)入度減一
                if(d[j] == 0) q.push(j); // 若入度減為0,入隊(duì)
            }
        }
        if (cnt < n) return 0; // 入隊(duì)的結(jié)點(diǎn)小于總結(jié)點(diǎn)數(shù)
        else return 1;
    }
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {


        for (int i = 0; i < prerequisites.size(); i++)
        {
            add(prerequisites[i][0], prerequisites[i][1]);
            d[prerequisites[i][1]]++; // 入度++
        }

        if (topsort(numCourses) == 0) return false;
        else return true;
       
    }
};

210. 課程表 II

題目描述:

????????現(xiàn)在你總共有?numCourses?門課需要選,記為?0?到?numCourses - 1。給你一個(gè)數(shù)組?prerequisites?,其中?prerequisites[i] = [ai, bi]?,表示在選修課程?ai?前?必須?先選修?bi?。

  • 例如,想要學(xué)習(xí)課程?0?,你需要先完成課程?1?,我們用一個(gè)匹配來表示:[0,1]?。

返回你為了學(xué)完所有課程所安排的學(xué)習(xí)順序??赡軙?huì)有多個(gè)正確的順序,你只要返回?任意一種?就可以了。如果不可能完成所有課程,返回?一個(gè)空數(shù)組?。

示例 1:

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

示例 2:

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

示例 3:

輸入:numCourses = 1, prerequisites = []
輸出:[0]

提示:

  • 1 <= numCourses <= 2000
  • 0 <= prerequisites.length <= numCourses * (numCourses - 1)
  • prerequisites[i].length == 2
  • 0 <= ai, bi < numCourses
  • ai != bi
  • 所有[ai, bi]?互不相同

實(shí)現(xiàn)代碼與解析:

拓?fù)渑判?/strong>

class Solution {
public:
    vector<int> h = vector<int>(2010, -1), e = vector<int>(20010, 0), ne = vector<int>(20010, 0), d = vector<int>(2010, 0), top = vector<int>(2010, 0);
    int idx = 0, cnt = 0;

    void add(int a, int b)
    {
        e[idx] = b; ne[idx] = h[a]; h[a] = idx++;
    }

    // 拓?fù)渑判?    bool topsort(int n)
    {
        queue<int> q; // 隊(duì)列
        
        for (int i = 0; i < n; i++)
            if (d[i] == 0) q.push(i); // 入度為 0的入隊(duì)
            
        while(q.size())
        {
            int t = q.front();
            top[cnt++] = t;
            q.pop();          
            // bfs
            for (int i = h[t]; ~i; i = ne[i])
            {
                int j = e[i];
                d[j]--; // 此節(jié)點(diǎn)入度減一
                if(d[j] == 0) q.push(j); // 若入度減為0,入隊(duì)
            }
        }
        if (cnt < n) return 0; // 入隊(duì)的結(jié)點(diǎn)小于總結(jié)點(diǎn)數(shù)
        else return 1;
    }
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {

        for (int i = 0; i < prerequisites.size(); i++)
        {
            add(prerequisites[i][1], prerequisites[i][0]);
            d[prerequisites[i][0]]++; // 入度++
        }

        if (topsort(numCourses) == 0) return {};
        else return vector<int>(top.begin(), top.begin() + numCourses);
    }
};

原理思路:

? ? ? ? 其實(shí)兩道題基本上差不多,就是一個(gè)需要返回順序,一個(gè)不用返回。

? ? ? ? 本質(zhì)上都是拓?fù)渑判虻幕具\(yùn)用,一點(diǎn)都不用改的。

拓?fù)渑判蛟斀猓◣в蠧++模板)_Cosmoshhhyyy的博客-CSDN博客

? ? ? ? 不懂的可以看我之前寫的拓?fù)渑判蚪馕觥?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-708011.html

到了這里,關(guān)于LeetCode:207. 課程表、210. 課程表 II(拓?fù)渑判?C++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?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)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

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

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

    2024年04月14日
    瀏覽(26)
  • 210. 課程表 II Python

    現(xiàn)在你總共有 numCourses 門課需要選,記為 0 到 numCourses - 1 。給你一個(gè)數(shù)組 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在選修課程 ai 前 必須 先選修 bi 。 返回你為了學(xué)完所有課程所安排的學(xué)習(xí)順序。可能會(huì)有多個(gè)正確的順序,你只要返回 任意一種 就可以了。如果不可能完

    2024年02月14日
    瀏覽(17)
  • 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)
  • java實(shí)現(xiàn)課程表 II

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

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

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

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

    2024年02月09日
    瀏覽(18)
  • leetcode 630. 課程表 III

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

    2024年02月16日
    瀏覽(13)
  • 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 。 例如,先修課程對(duì) [0, 1] 表示:想要學(xué)

    2024年02月09日
    瀏覽(20)
  • 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)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包