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

算法沉淀——貪心算法五(leetcode真題剖析)

這篇具有很好參考價(jià)值的文章主要介紹了算法沉淀——貪心算法五(leetcode真題剖析)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

算法沉淀——貪心算法五(leetcode真題剖析),算法沉淀,算法,貪心算法,leetcode

01.跳躍游戲 II

題目鏈接:https://leetcode.cn/problems/jump-game-ii/

給定一個(gè)長度為 n0 索引整數(shù)數(shù)組 nums。初始位置為 nums[0]

每個(gè)元素 nums[i] 表示從索引 i 向前跳轉(zhuǎn)的最大長度。換句話說,如果你在 nums[i] 處,你可以跳轉(zhuǎn)到任意 nums[i + j] 處:

  • 0 <= j <= nums[i]
  • i + j < n

返回到達(dá) nums[n - 1] 的最小跳躍次數(shù)。生成的測試用例可以到達(dá) nums[n - 1]

示例 1:

輸入: nums = [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個(gè)位置的最小跳躍數(shù)是 2。
     從下標(biāo)為 0 跳到下標(biāo)為 1 的位置,跳 1 步,然后跳 3 步到達(dá)數(shù)組的最后一個(gè)位置。

示例 2:

輸入: nums = [2,3,0,1,4]
輸出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 題目保證可以到達(dá) nums[n-1]

思路

這里我們可以利用層序遍歷的思想進(jìn)行數(shù)組遍歷,從第一步開始,計(jì)算每一步能跨出的范圍內(nèi)最大的那個(gè)數(shù)字的步數(shù),這樣我們就可以找到需要使用的最小的跳躍步數(shù)。

代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-847194.html

class Solution {
public:
    int jump(vector<int>& nums) {
        int left=0,right=0,maxPos=0,count=0,n=nums.size();
        while(left<=right){
            if(maxPos>=n-1) return count;
            for(int i=left;i<=right;i++) maxPos=max(maxPos,nums[i]+i);
            left=right+1;
            right=maxPos;
            count++;
        }
        return -1;
    }
};

02.跳躍游戲

題目鏈接:https://leetcode.cn/problems/jump-game/

給你一個(gè)非負(fù)整數(shù)數(shù)組 nums ,你最初位于數(shù)組的 第一個(gè)下標(biāo) 。數(shù)組中的每個(gè)元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達(dá)最后一個(gè)下標(biāo),如果可以,返回 true ;否則,返回 false 。

示例 1:

輸入:nums = [2,3,1,1,4]
輸出:true
解釋:可以先跳 1 步,從下標(biāo) 0 到達(dá)下標(biāo) 1, 然后再從下標(biāo) 1 跳 3 步到達(dá)最后一個(gè)下標(biāo)。

示例 2:

輸入:nums = [3,2,1,0,4]
輸出:false
解釋:無論怎樣,總會(huì)到達(dá)下標(biāo)為 3 的位置。但該下標(biāo)的最大跳躍長度是 0 , 所以永遠(yuǎn)不可能到達(dá)最后一個(gè)下標(biāo)。

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 105

思路

這道題可以借用上面的思想,只需修改返回值即可。

代碼

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int left=0,right=0,maxPos=0,count=0,n=nums.size();
        while(left<=right){
            if(maxPos>=n-1) return true;
            for(int i=left;i<=right;i++) maxPos=max(maxPos,nums[i]+i);
            left=right+1;
            right=maxPos;
            count++;
        }
        return false;
    }
};

03.加油站

題目鏈接:https://leetcode.cn/problems/gas-station/

在一條環(huán)路上有 n 個(gè)加油站,其中第 i 個(gè)加油站有汽油 gas[i] 升。

你有一輛油箱容量無限的的汽車,從第 i 個(gè)加油站開往第 i+1 個(gè)加油站需要消耗汽油 cost[i] 升。你從其中的一個(gè)加油站出發(fā),開始時(shí)油箱為空。

給定兩個(gè)整數(shù)數(shù)組 gascost ,如果你可以按順序繞環(huán)路行駛一周,則返回出發(fā)時(shí)加油站的編號(hào),否則返回 -1 。如果存在解,則 保證 它是 唯一 的。

示例 1:

輸入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
輸出: 3
解釋:
從 3 號(hào)加油站(索引為 3 處)出發(fā),可獲得 4 升汽油。此時(shí)油箱有 = 0 + 4 = 4 升汽油
開往 4 號(hào)加油站,此時(shí)油箱有 4 - 1 + 5 = 8 升汽油
開往 0 號(hào)加油站,此時(shí)油箱有 8 - 2 + 1 = 7 升汽油
開往 1 號(hào)加油站,此時(shí)油箱有 7 - 3 + 2 = 6 升汽油
開往 2 號(hào)加油站,此時(shí)油箱有 6 - 4 + 3 = 5 升汽油
開往 3 號(hào)加油站,你需要消耗 5 升汽油,正好足夠你返回到 3 號(hào)加油站。
因此,3 可為起始索引。

示例 2:

輸入: gas = [2,3,4], cost = [3,4,3]
輸出: -1
解釋:
你不能從 0 號(hào)或 1 號(hào)加油站出發(fā),因?yàn)闆]有足夠的汽油可以讓你行駛到下一個(gè)加油站。
我們從 2 號(hào)加油站出發(fā),可以獲得 4 升汽油。 此時(shí)油箱有 = 0 + 4 = 4 升汽油
開往 0 號(hào)加油站,此時(shí)油箱有 4 - 3 + 2 = 3 升汽油
開往 1 號(hào)加油站,此時(shí)油箱有 3 - 3 + 3 = 3 升汽油
你無法返回 2 號(hào)加油站,因?yàn)榉党绦枰?4 升汽油,但是你的油箱只有 3 升汽油。
因此,無論怎樣,你都不可能繞環(huán)路行駛一周。

提示:

  • gas.length == n
  • cost.length == n
  • 1 <= n <= 105
  • 0 <= gas[i], cost[i] <= 104

思路

枚舉所有起點(diǎn),模擬加油的流程,但在這里做一個(gè)優(yōu)化,就是貪心思想,我們?cè)诿杜e每一個(gè)點(diǎn)時(shí),若該點(diǎn)不成功,就直接跳過中間所有點(diǎn),這樣我們可以做很大的優(yōu)化。

代碼

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int n=gas.size();
        for(int i=0;i<n;i++){
            int rest = 0, step = 0;
            while(step<n){
                int  index=(i+step)%n;
                rest+=gas[index]-cost[index];
                if(rest<0) break;
                step++;
            }
            if(rest>=0) return i;
            i+=step;
        }
        return -1;
    }
};

04.單調(diào)遞增的數(shù)字

題目鏈接:https://leetcode.cn/problems/monotone-increasing-digits/

當(dāng)且僅當(dāng)每個(gè)相鄰位數(shù)上的數(shù)字 xy 滿足 x <= y 時(shí),我們稱這個(gè)整數(shù)是單調(diào)遞增的。

給定一個(gè)整數(shù) n ,返回 小于或等于 n 的最大數(shù)字,且數(shù)字呈 單調(diào)遞增 。

示例 1:

輸入: n = 10
輸出: 9

示例 2:

輸入: n = 1234
輸出: 1234

示例 3:

輸入: n = 332
輸出: 299

提示:

  • 0 <= n <= 109

思路

為了方便處理數(shù)字,我們可以先將整數(shù)轉(zhuǎn)換成字符串,然后從左往右掃描,找到第一個(gè)遞減的位置,然后從這個(gè)位置往前推,推到相同數(shù)字的最前端,該位置-1,后面所有數(shù)都改成9,這樣就得到最終結(jié)果

代碼

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string s=to_string(n);

        int i=0,m=s.size();
        while(i+1<m&&s[i]<=s[i+1]) i++;

        if(i+1==m) return n;

        while(i-1>=0&&s[i]==s[i-1]) i--;

        s[i]--;
        for(int j=i+1;j<m;j++) s[j]='9';
        return stoi(s);
    }
};

到了這里,關(guān)于算法沉淀——貪心算法五(leetcode真題剖析)的文章就介紹完了。如果您還想了解更多內(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真題剖析)

    算法沉淀——貪心算法七(leetcode真題剖析)

    題目鏈接:https://leetcode.cn/problems/integer-replacement/ 給定一個(gè)正整數(shù) n ,你可以做如下操作: 如果 n 是偶數(shù),則用 n / 2 替換 n 。 如果 n 是奇數(shù),則可以用 n + 1 或 n - 1 替換 n 。 返回 n 變?yōu)?1 所需的 最小替換次數(shù) 。 示例 1: 示例 2: 示例 3: 提示: 1 = n = 2^31 - 1 思路 這里我們

    2024年03月23日
    瀏覽(24)
  • 算法沉淀——棧(leetcode真題剖析)

    算法沉淀——棧(leetcode真題剖析)

    棧(Stack)是一種基于先進(jìn)后出(Last In, First Out,LIFO)原則的數(shù)據(jù)結(jié)構(gòu)。棧具有兩個(gè)主要的操作: 壓棧(Push) :將元素添加到棧的頂部。 出棧(Pop) :從棧的頂部移除元素。 棧常常用于需要反轉(zhuǎn)操作順序的場景,或者在需要記錄操作歷史的情況下。在算法中,棧的應(yīng)用廣

    2024年02月20日
    瀏覽(18)
  • 算法沉淀——遞歸(leetcode真題剖析)

    算法沉淀——遞歸(leetcode真題剖析)

    遞歸是一種通過調(diào)用自身的方式來解決問題的算法。在遞歸算法中,問題被分解為更小的相似子問題,然后通過對(duì)這些子問題的解進(jìn)行組合來解決原始問題。遞歸算法通常包含兩個(gè)主要部分: 基本情況(Base Case): 定義問題的最小規(guī)模,直接解答而不再進(jìn)行遞歸?;厩闆r

    2024年02月20日
    瀏覽(19)
  • 算法沉淀——多源 BFS(leetcode真題剖析)

    算法沉淀——多源 BFS(leetcode真題剖析)

    多源 BFS 是指從多個(gè)源點(diǎn)同時(shí)進(jìn)行廣度優(yōu)先搜索的算法。在傳統(tǒng)的 BFS 中,我們通常從一個(gè)起始點(diǎn)開始,逐層遍歷所有的相鄰節(jié)點(diǎn)。而在多源 BFS 中,我們可以同時(shí)從多個(gè)源點(diǎn)開始,從這些源點(diǎn)出發(fā),逐層向外擴(kuò)展,直到達(dá)到目標(biāo)或者遍歷完整個(gè)圖。 多源 BFS 可以用于解決一些

    2024年02月19日
    瀏覽(25)
  • 算法沉淀——BFS 解決 FloodFill 算法(leetcode真題剖析)

    算法沉淀——BFS 解決 FloodFill 算法(leetcode真題剖析)

    BFS(廣度優(yōu)先搜索)解決 Flood Fill 算法的基本思想是通過從起始點(diǎn)開始,逐層向外擴(kuò)展,訪問所有與起始點(diǎn)相連且具有相同特性(顏色等)的區(qū)域。在 Flood Fill 中,通常是通過修改圖像的像素顏色。 下面是 BFS 解決 Flood Fill 算法的步驟: 初始化: 將起始點(diǎn)的顏色修改為新的

    2024年02月20日
    瀏覽(15)
  • 算法沉淀——優(yōu)先級(jí)隊(duì)列(堆)(leetcode真題剖析)

    算法沉淀——優(yōu)先級(jí)隊(duì)列(堆)(leetcode真題剖析)

    優(yōu)先隊(duì)列(Priority Queue)是一種抽象數(shù)據(jù)類型,它類似于隊(duì)列(Queue),但是每個(gè)元素都有一個(gè)關(guān)聯(lián)的優(yōu)先級(jí)。在優(yōu)先隊(duì)列中,元素按照優(yōu)先級(jí)從高到低(或從低到高)排列,高優(yōu)先級(jí)的元素先出隊(duì)。這種數(shù)據(jù)結(jié)構(gòu)可以用堆(Heap)來實(shí)現(xiàn)。 堆是一種二叉樹結(jié)構(gòu),有兩種主要類

    2024年02月22日
    瀏覽(29)
  • 算法沉淀——BFS 解決拓?fù)渑判颍╨eetcode真題剖析)

    算法沉淀——BFS 解決拓?fù)渑判颍╨eetcode真題剖析)

    Breadth-First Search (BFS) 在拓?fù)渑判蛑械膽?yīng)用主要是用來解決有向無環(huán)圖(DAG)的拓?fù)渑判騿栴}。拓?fù)渑判蚴菍?duì)有向圖中所有節(jié)點(diǎn)的一種線性排序,使得對(duì)于每一條有向邊 (u, v),節(jié)點(diǎn) u 在排序中都出現(xiàn)在節(jié)點(diǎn) v 的前面。如果圖中存在環(huán)路,則無法進(jìn)行拓?fù)渑判颉?BFS 解決拓?fù)渑判?/p>

    2024年02月21日
    瀏覽(26)
  • 算法沉淀——BFS 解決最短路問題(leetcode真題剖析)

    算法沉淀——BFS 解決最短路問題(leetcode真題剖析)

    BFS (廣度優(yōu)先搜索)是解決最短路徑問題的一種常見算法。在這種情況下,我們通常使用BFS來查找從一個(gè)起始點(diǎn)到目標(biāo)點(diǎn)的最短路徑。 具體步驟如下: 初始化: 從起始點(diǎn)開始,將其放入隊(duì)列中,并標(biāo)記為已訪問。 BFS遍歷: 不斷從隊(duì)列中取出頂點(diǎn),然后探索與該頂點(diǎn)相鄰且

    2024年02月20日
    瀏覽(20)
  • 算法沉淀——窮舉、暴搜、深搜、回溯、剪枝綜合練習(xí)一(leetcode真題剖析)

    算法沉淀——窮舉、暴搜、深搜、回溯、剪枝綜合練習(xí)一(leetcode真題剖析)

    題目鏈接:https://leetcode.cn/problems/permutations/ 給定一個(gè)不含重復(fù)數(shù)字的數(shù)組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 6 -10 = nums[i] = 10 nums 中的所有整數(shù) 互不相同 思路 這是一個(gè)典型的回溯問題,需要在每

    2024年02月21日
    瀏覽(23)
  • 2023華為OD機(jī)試真題【區(qū)間交疊/貪心算法】【Python Java】

    2023華為OD機(jī)試真題【區(qū)間交疊/貪心算法】【Python Java】

    給定坐標(biāo)軸上的一組線段,線段的起點(diǎn)和終點(diǎn)均為整數(shù)并且長度不小于1,請(qǐng)你從中找到最少數(shù)量的線段,這些線段可以覆蓋住所有線段。 輸入描述 第一行輸入為所有線段的數(shù)量,不超過10000,后面每行表示一條線段,格式為”x,y”, x和y 分別表示起點(diǎn)和終點(diǎn),取值范圍是

    2024年02月13日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包