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

【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II

這篇具有很好參考價值的文章主要介紹了【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

個人主頁:兜里有顆棉花糖
歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng)
收錄于專欄【手撕算法系列專欄】【LeetCode】
??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助
??希望我們一起努力、成長,共同進步。
【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II,LeetCode,手撕算法系列專欄,算法,動態(tài)規(guī)劃,leetcode

一、LCR 089. 打家劫舍

點擊可直接跳轉(zhuǎn)到該題目

1??題目描述

一個專業(yè)的小偷,計劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響小偷偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。

給定一個代表每個房屋存放金額的非負整數(shù)數(shù)組 nums ,請計算 不觸動警報裝置的情況下 ,一夜之內(nèi)能夠偷竊到的最高金額。

示例1:

輸入:nums = [1,2,3,1]
輸出:4
解釋:偷竊 1 號房屋 (金額 = 1) ,然后偷竊 3 號房屋 (金額 = 3)。
偷竊到的最高金額 = 1 + 3 = 4 。

示例2:

輸入:nums = [2,7,9,3,1]
輸出:12
解釋:偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。偷竊到的最高金額 = 2 + 9 + 1 = 12 。

注意:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 400

2??題目解析

狀態(tài)轉(zhuǎn)移方程如下:

  • f[i] = g[i - 1] + nums[i-1]
  • g[i] = max(f[i-1],g[i-1])

狀態(tài)表示:

  • f[i] 表示的是偷取前 i 個房屋中的第 i 個房屋時的最大金額。
  • g[i] 表示的是不偷取第 i 個房屋時的最大金額。

3??解題代碼

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();

        vector<int> f(n + 1);
        auto g = f;

        for(int i = 1;i <= n;i++)
        {
            f[i] = g[i - 1] + nums[i-1];
            g[i] = max(f[i-1],g[i-1]);
        }
        
        return max(f[n],g[n]);
    }
};

代碼通過啦:
【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II,LeetCode,手撕算法系列專欄,算法,動態(tài)規(guī)劃,leetcode

二、LCR 090. 打家劫舍 II

點擊直接跳轉(zhuǎn)到該題目

1??題目描述

一個專業(yè)的小偷,計劃偷竊一個環(huán)形街道上沿街的房屋,每間房內(nèi)都藏有一定的現(xiàn)金。這個地方所有的房屋都 圍成一圈 ,這意味著第一個房屋和最后一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。

給定一個代表每個房屋存放金額的非負整數(shù)數(shù)組 nums ,請計算 在不觸動警報裝置的情況下 ,今晚能夠偷竊到的最高金額。

示例1:

輸入:nums = [2,3,2]
輸出:3
解釋:你不能先偷竊 1 號房屋(金額 = 2),然后偷竊 3 號房屋(金額 = 2), 因為他們是相鄰的。

示例2:

輸入:nums = [1,2,3,1]
輸出:4
解釋:你可以先偷竊 1 號房屋(金額 = 1),然后偷竊 3 號房屋(金額 = 3)。偷竊到的最高金額 = 1 + 3 = 4 。

示例3:

輸入:nums = [0]
輸出:0

注意:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 1000

2??題目解析

狀態(tài)表示:

  • f[i] 表示偷盜i位置時,偷取i位置,此時的最大金額
  • g[i] 表示偷盜i位置時,不偷取i位置,此時的最大金額

這里要分兩種情況進行討論:第一種情況是打劫第一家,第二種情況就是不打劫第一家。

情況1(打劫第一家):最大總金額 = nums[0] + 街道(2,n-2)的最大總金額

情況2(不打劫第一家):最大總金額 = 街道(1,n-1)的最大總金額

街道(起始位置,終止位置)的最大總金額這里完全按照打家劫舍 I的方式來求取即可。

最終返回值是兩種情況的最大值。

3??解題代碼

示例代碼1:

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        int ret1 = 0,ret2 = 0;

        // 第一種情況:打劫第一家
        vector<int> f1(n + 1);
        vector<int> g1(n + 1);
        for(int i = 3;i <= n-1;i++)
        {
            f1[i] = nums[i - 1] + g1[i-1];
            g1[i] = max(f1[i-1],g1[i-1]);
        }
        ret1 = max(f1[n-1],g1[n-1]) + nums[0];
        // 第二種情況:不打劫第一家
        vector<int> f2(n + 1);
        vector<int> g2(n + 1);
        for(int i = 2;i <= n;i++)
        {
            f2[i] = nums[i - 1] + g2[i-1];
            g2[i] = max(f2[i-1],g2[i-1]);
        }
        ret2 = max(f2[n],g2[n]);

        return max(ret1,ret2);
    }
};

示例代碼2:

class Solution {
public:
    int rob(vector<int>& nums) 
    {
        int n = nums.size();
        int ret = max((rob1(nums,2,n-2) + nums[0]),rob1(nums,1,n-1));
        return ret;
    }

    int rob1(vector<int> nums,int l,int r)
    {
        if(l>r) return 0;
        int n = nums.size();
        vector<int> f(n);
        auto g = f; 
        f[l] = nums[l];
        for(int i = l + 1 ;i <= r;i++)
        {
            f[i] = nums[i] + g[i-1];
            g[i] = max(g[i-1],f[i-1]);
        }
        return max(f[r],g[r]);
    }
};

通過:
【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II,LeetCode,手撕算法系列專欄,算法,動態(tài)規(guī)劃,leetcode文章來源地址http://www.zghlxwxcb.cn/news/detail-807298.html

到了這里,關(guān)于【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java 動態(tài)規(guī)劃 Leetcode 213. 打家劫舍 II

    Java 動態(tài)規(guī)劃 Leetcode 213. 打家劫舍 II

    代碼展示: ????????該題其實是Java 動態(tài)規(guī)劃 面試題 17.16. 按摩師的變種,增加了一個首尾是相鄰的條件,而我們解決該題也要用到鏈接的這道題的思想,可以先去看一下上面這篇博客 此題可以采用動態(tài)規(guī)劃的方法進行解決,根據(jù)解決動態(tài)規(guī)劃題目的5大步驟進行逐步分析

    2024年02月13日
    瀏覽(24)
  • 【LeetCode動態(tài)規(guī)劃#11】打家劫舍系列題(涉及環(huán)結(jié)構(gòu)和樹形DP的討論)

    力扣題目鏈接(opens new window) 你是一個專業(yè)的小偷,計劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。 給定一個代表每個房屋存放金額的非

    2023年04月21日
    瀏覽(26)
  • 【算法|動態(tài)規(guī)劃No.6】leetcode63. 不同路徑Ⅱ

    【算法|動態(tài)規(guī)劃No.6】leetcode63. 不同路徑Ⅱ

    個人主頁:平行線也會相交 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月16日
    瀏覽(20)
  • 【算法|動態(tài)規(guī)劃系列No.5】leetcode62. 不同路徑

    【算法|動態(tài)規(guī)劃系列No.5】leetcode62. 不同路徑

    個人主頁:平行線也會相交 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月12日
    瀏覽(23)
  • 【算法|動態(tài)規(guī)劃No.17】leetcode64. 最小路徑和

    【算法|動態(tài)規(guī)劃No.17】leetcode64. 最小路徑和

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月07日
    瀏覽(21)
  • 【算法|動態(tài)規(guī)劃No.15】leetcode1035. 不相交的線

    【算法|動態(tài)規(guī)劃No.15】leetcode1035. 不相交的線

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月06日
    瀏覽(29)
  • 【算法|動態(tài)規(guī)劃No.7】leetcode300. 最長遞增子序列

    【算法|動態(tài)規(guī)劃No.7】leetcode300. 最長遞增子序列

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月07日
    瀏覽(30)
  • 【算法|動態(tài)規(guī)劃No.12】leetcode152. 乘積最大子數(shù)組

    【算法|動態(tài)規(guī)劃No.12】leetcode152. 乘積最大子數(shù)組

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月08日
    瀏覽(19)
  • Day 42 算法記錄|動態(tài)規(guī)劃 09 (打家劫舍)

    Day 42 算法記錄|動態(tài)規(guī)劃 09 (打家劫舍)

    1.dp[i]:考慮下標i(包括i)以內(nèi)的房屋,最多可以偷竊的金額為dp[i]。 2.dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]); 3.初始化,dp[0] 和 dp[1],dp[0] 一定是 nums[0],dp[1] = max(nums[0], nums[1]); 3.遍歷順序,dp[i] 是根據(jù)dp[i - 2] 和 dp[i - 1] 推導(dǎo)出來的,那么一定是從前到后遍歷! 進一步對滾動數(shù)組

    2024年02月15日
    瀏覽(24)
  • 【算法|動態(tài)規(guī)劃No30】leetcode5. 最長回文子串

    【算法|動態(tài)規(guī)劃No30】leetcode5. 最長回文子串

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學(xué)習(xí)過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月08日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包