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

貪心算法基礎(chǔ)及l(fā)eetcode例題

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

參考

理論

本質(zhì):找到每個(gè)階段的局部最優(yōu),然后去推導(dǎo)得到全局最優(yōu)
兩個(gè)極端:常識(shí)&&很難:

很多同學(xué)通過(guò)了貪心的題目,但都不知道自己用了貪心算法,因?yàn)樨澬挠袝r(shí)候就是常識(shí)性的推導(dǎo),所以會(huì)認(rèn)為本應(yīng)該就這么做!

套路:
貪心沒(méi)有套路,說(shuō)白了就是常識(shí)性推導(dǎo)加上舉反例
做題的時(shí)候,只要想清楚 局部最優(yōu) 是什么,如果推導(dǎo)出全局最優(yōu),其實(shí)就夠了。

貪心算法一般分為如下四步:

將問(wèn)題分解為若干個(gè)子問(wèn)題
找出適合的貪心策略
求解每一個(gè)子問(wèn)題的最優(yōu)解
將局部最優(yōu)解堆疊成全局最優(yōu)解
這個(gè)四步其實(shí)過(guò)于理論化了,我們平時(shí)在做貪心類的題目 很難去按照這四步去思考,真是有點(diǎn)“雞肋”。

Leetcode題目

簡(jiǎn)單題

455.分發(fā)餅干

思路:大餅干 喂 胃口大的kid,才能充分利用
貪心算法基礎(chǔ)及l(fā)eetcode例題

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int j=s.length-1;
        int sum = 0;

        for(int i=g.length-1;i>=0;i--){
            if(j>=0 && s[j]>=g[i]){
                sum++;
                j--;
            }
        }
        return sum;
    }
}

中等題

序列問(wèn)題---376. 擺動(dòng)序列

思路:考慮情況
貪心算法基礎(chǔ)及l(fā)eetcode例題

記錄擺動(dòng)條件:
prediff>0 && curdiff<0
或者 prediff<0 && curdiff>0

情況1:上下坡中有平坡
貪心算法基礎(chǔ)及l(fā)eetcode例題
在圖中,當(dāng)i指向第一個(gè)2的時(shí)候,prediff > 0 && curdiff = 0 ,當(dāng) i 指向最后一個(gè)2的時(shí)候 prediff = 0 && curdiff < 0。
如果我們采用,刪左面三個(gè)2的規(guī)則,那么 當(dāng) prediff = 0 && curdiff < 0 也要記錄一個(gè)峰值。

綜合到上述:記錄條件【prediff>=0 && curdiff<0 或 prediff=<0 && curdiff>0】

情況2:首尾兩端
貪心算法基礎(chǔ)及l(fā)eetcode例題
result初始為1(默認(rèn)最右面有一個(gè)峰值),
curDiff > 0 && preDiff <= 0,那么result++(計(jì)算了左面的峰值),最后得到的result就是2(峰值個(gè)數(shù)為2即擺動(dòng)序列長(zhǎng)度為2)

做法:初始化prediff=0

情況3:?jiǎn)握{(diào)有平坡
貪心算法基礎(chǔ)及l(fā)eetcode例題
只需要在 這個(gè)坡度 擺動(dòng)變化的時(shí)候,更新prediff就行,這樣prediff在 單調(diào)區(qū)間有平坡的時(shí)候 就不會(huì)發(fā)生變化

做法:調(diào)整prediff更新位置

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

class Solution {
    public int wiggleMaxLength(int[] nums) {
    
        int prediff = 0;//考慮只有兩個(gè)元素的時(shí)候,默認(rèn)為0;為頭元素制造一個(gè)平坡
        int curdiff = 0;
        int result = 1;//默認(rèn)最右端有坡度
        //一個(gè)元素的時(shí)候
        if(nums.length == 0) return result;
        
        for(int i=0;i<nums.length-1;i++){//nums.length-1 因?yàn)樽钣叶艘呀?jīng)記錄了

            curdiff = nums[i+1] - nums[i];
             
            if((prediff>=0 && curdiff <0) || (prediff<=0 && curdiff >0)){
                result++;
                prediff = curdiff;
            }
        //prediff = curdiff;
        }
        return result;
    }
}

股票問(wèn)題---122. 買賣股票的最佳時(shí)機(jī) II

只有一只股票!當(dāng)前只有買股票或者賣股票的操作
關(guān)鍵點(diǎn):想到其實(shí)最終利潤(rùn)是可以分解的:每天的利潤(rùn)
貪心:只收集每次的正利潤(rùn)
貪心算法基礎(chǔ)及l(fā)eetcode例題
其實(shí)我們需要收集每天的正利潤(rùn)就可以,收集正利潤(rùn)的區(qū)間,就是股票買賣的區(qū)間,而我們只需要關(guān)注最終利潤(rùn),不需要記錄區(qū)間。

java

class Solution {
    public int maxProfit(int[] prices) {
        int sum = 0;
        for(int i=0;i < prices.length-1;i++){
            if((prices[i+1] - prices[i])>= 0){
                sum += prices[i+1] - prices[i];
            }
        }

        return sum;
    }
}

兩個(gè)維度權(quán)衡問(wèn)題---135. 分發(fā)糖果

關(guān)鍵點(diǎn):兩邊分別考慮
先確定 右邊比左邊高的情況;然后再確定 左邊比右邊高的情況文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-419231.html

class Solution {
    public int candy(int[] ratings) {
        int sum = 0;
        int len = ratings.length;
        int[] candy = new int[len];
        

        candy[0]=1;


        for(int i=1;i<len;i++){
            if(ratings[i] > ratings[i-1]){
                candy[i] = candy[i-1] +1;
            }else{
                candy[i] =1;
            }
        }

        for(int i=len-2;i>=0;i--){
            if(ratings[i] > ratings[i+1]){
                candy[i] = Math.max(candy[i+1] +1,candy[i]);
            }
        }

        for(int i=0;i<len;i++){
            sum += candy[i];
        }

        return sum;
    }
}

到了這里,關(guān)于貪心算法基礎(chǔ)及l(fā)eetcode例題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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)文章

  • 華為OD機(jī)試題中 動(dòng)態(tài)規(guī)劃和貪心算法例題

    在 ACM 比賽中,有許多常見的編程算法和數(shù)據(jù)結(jié)構(gòu)經(jīng)常被使用。本系列博客會(huì)羅列各種常見算法,以及其代表性例題。 這部分內(nèi)容可以用于類似華為 OD 機(jī)考學(xué)習(xí)。 動(dòng)態(tài)規(guī)劃是一種將復(fù)雜問(wèn)題分解為簡(jiǎn)單子問(wèn)題并使用子問(wèn)題的解來(lái)構(gòu)建更大問(wèn)題的方法。它通常用于解決最長(zhǎng)公

    2024年01月16日
    瀏覽(22)
  • 算法沉淀——貪心算法五(leetcode真題剖析)

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

    題目鏈接:https://leetcode.cn/problems/jump-game-ii/ 給定一個(gè)長(zhǎng)度為 n 的 0 索引 整數(shù)數(shù)組 nums 。初始位置為 nums[0] 。 每個(gè)元素 nums[i] 表示從索引 i 向前跳轉(zhuǎn)的最大長(zhǎng)度。換句話說(shuō),如果你在 nums[i] 處,你可以跳轉(zhuǎn)到任意 nums[i + j] 處: 0 = j = nums[i] i + j n 返回到達(dá) nums[n - 1] 的最小跳躍次

    2024年04月11日
    瀏覽(23)
  • 算法沉淀——貪心算法六(leetcode真題剖析)

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

    題目鏈接:https://leetcode.cn/problems/broken-calculator/ 在顯示著數(shù)字 startValue 的壞計(jì)算器上,我們可以執(zhí)行以下兩種操作: **雙倍(Double):**將顯示屏上的數(shù)字乘 2; **遞減(Decrement):**將顯示屏上的數(shù)字減 1 。 給定兩個(gè)整數(shù) startValue 和 target 。返回顯示數(shù)字 target 所需的最小操

    2024年04月11日
    瀏覽(45)
  • 算法沉淀——貪心算法三(leetcode真題剖析)

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

    題目鏈接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 給你一個(gè)整數(shù)數(shù)組 prices ,其中 prices[i] 表示某支股票第 i 天的價(jià)格。 在每一天,你可以決定是否購(gòu)買和/或出售股票。你在任何時(shí)候 最多 只能持有 一股 股票。你也可以先購(gòu)買,然后在 同一天 出售。 返回 你能獲得

    2024年03月24日
    瀏覽(20)
  • 算法沉淀——貪心算法七(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真題剖析)

    貪心算法(Greedy Algorithm)是一種基于貪心策略的優(yōu)化算法,它通常用于求解最優(yōu)化問(wèn)題,每一步都選擇當(dāng)前狀態(tài)下的最優(yōu)解,以期望通過(guò)局部最優(yōu)的選擇最終達(dá)到全局最優(yōu)。貪心算法的思想是在每一步都做出在當(dāng)前狀態(tài)下局部最優(yōu)的選擇,而不考慮未來(lái)可能造成的影響。 在

    2024年03月08日
    瀏覽(17)
  • 算法沉淀——貪心算法二(leetcode真題剖析)

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

    題目鏈接:https://leetcode.cn/problems/longest-increasing-subsequence/ 給你一個(gè)整數(shù)數(shù)組 nums ,找到其中最長(zhǎng)嚴(yán)格遞增子序列的長(zhǎng)度。 子序列 是由數(shù)組派生而來(lái)的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如, [3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。 示例 1: 示

    2024年03月19日
    瀏覽(68)
  • 【貪心算法】leetcode刷題

    【貪心算法】leetcode刷題

    貪心算法無(wú)固定套路。 核心思想:先找局部最優(yōu),再擴(kuò)展到全局最優(yōu)。 兩種思路: 1、從大到小。局部最優(yōu)就是大餅干喂給胃口大的,充分利用餅干尺寸喂飽一個(gè),全局最優(yōu)就是喂飽盡可能多的小孩。 先遍歷的胃口,在遍歷的餅干 2、從小到大。 小餅干先喂飽小胃口 。兩個(gè)

    2024年02月14日
    瀏覽(24)
  • leetcode系列貪心算法匯總

    11 盛水最多的容器 題目:給一個(gè)一維數(shù)組,大概的意思就是下標(biāo)代表水槽的寬度,數(shù)組的值代表這個(gè)位置水槽的高度,求盛水最多的容量。 解析:肯定得有個(gè)臨時(shí)變量來(lái)存最大值,且不斷進(jìn)行比較來(lái)更新最大值,然后分別從兩邊開始使用雙指針進(jìn)行遍歷,tmp := (right - left)

    2024年02月07日
    瀏覽(15)
  • 【leetcode】貪心算法介紹

    詳細(xì)且全面地分析貪心算法常用的解題套路、數(shù)據(jù)結(jié)構(gòu)和代碼邏輯如下: 找最值型: 每一步選擇都是局部最優(yōu)解,最后得到的結(jié)果就是全局最優(yōu)解。 常用于找零錢問(wèn)題、區(qū)間覆蓋問(wèn)題等。 一般情況下,可以通過(guò)排序?qū)?shù)據(jù)進(jìn)行處理,然后逐步選擇最優(yōu)解。 區(qū)間問(wèn)題: 將問(wèn)

    2024年02月21日
    瀏覽(15)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包