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

打家劫舍 III

這篇具有很好參考價值的文章主要介紹了打家劫舍 III。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

題目鏈接

打家劫舍 III

題目描述

打家劫舍 III,算法TOP100,數(shù)據(jù)結(jié)構(gòu),leetcode,算法,java
打家劫舍 III,算法TOP100,數(shù)據(jù)結(jié)構(gòu),leetcode,算法,java

注意點(diǎn)

  • 如果 兩個直接相連的房子在同一天晚上被打劫 ,房屋將自動報警
  • 返回 在不觸動警報的情況下 ,小偷能夠盜取的最高金額

解答思路

  • 記憶化 + 解決重復(fù)子問題解決本題,在任意一個位置,小偷可以選擇打劫該房屋和不打劫該房屋,如果打劫,則不能打劫該節(jié)點(diǎn)下的子節(jié)點(diǎn),如果不打劫,則該節(jié)點(diǎn)下的子節(jié)點(diǎn)可以選擇打劫也可以選擇不打劫,可以轉(zhuǎn)換為動態(tài)規(guī)劃的問題:任意一個位置處能夠盜取的最大金額為其子節(jié)點(diǎn)能夠盜取的最大金額之和其本身加上其孫子節(jié)點(diǎn)能夠盜取的最大金額之和的最大值,為了防止同一個節(jié)點(diǎn)的最大金額重復(fù)計(jì)算,可以使用Map存儲每個節(jié)點(diǎn)的最大金額
  • 參考題解在任意一個節(jié)點(diǎn)時,可以用大小為2的數(shù)組result存儲該節(jié)點(diǎn)的兩種情況:也就是result[0]為不搶劫該節(jié)點(diǎn)的最大金額,result[1]為搶劫該節(jié)點(diǎn)的最大金額

代碼

方法一:

class Solution {
    public int rob(TreeNode root) {
        Map<TreeNode, Integer> map = new HashMap<>();
        return robInterval(root, map);
    }

    public int robInterval(TreeNode root, Map<TreeNode, Integer> map) {
        if (root == null) {
            return 0;
        }
        if (map.get(root) != null) {
            return map.get(root);
        }
        int money = root.val;
        if (root.left != null) {
            money = money + robInterval(root.left.left, map) + robInterval(root.left.right, map);
        }
        if (root.right != null) {
            money = money + robInterval(root.right.left, map) + robInterval(root.right.right, map);
        }
        int maxVal = Math.max(money, robInterval(root.left, map) + robInterval(root.right, map));
        map.put(root, maxVal);
        return maxVal;
    }
}

方法二:文章來源地址http://www.zghlxwxcb.cn/news/detail-708418.html

// 優(yōu)化版
class Solution {
    public int rob(TreeNode root) {
        // 0不搶劫,1搶劫
        int[] result = robInternal(root);
        return Math.max(result[0], result[1]);
    }

    public int[] robInternal(TreeNode root) {
        if (root == null) {
            return new int[2];
        }
        int[] leftVal = robInternal(root.left);
        int[] rightVal = robInternal(root.right);
        int[] result = new int[2];
        result[0] = Math.max(leftVal[0], leftVal[1]) + Math.max(rightVal[0], rightVal[1]);
        result[1] =  root.val + leftVal[0] + rightVal[0];
        return result;
    }
}

關(guān)鍵點(diǎn)

  • 動態(tài)規(guī)劃的思想

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

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

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

相關(guān)文章

  • LeetCode 337. 打家劫舍 III

    LeetCode 337. 打家劫舍 III

    原題鏈接:. - 力扣(LeetCode) 小偷又發(fā)現(xiàn)了一個新的可行竊的地區(qū)。這個地區(qū)只有一個入口,我們稱之為? root ?。 除了? root ?之外,每棟房子有且只有一個“父“房子與之相連。一番偵察之后,聰明的小偷意識到“這個地方的所有房屋的排列類似于一棵二叉樹”。 如果?

    2024年04月15日
    瀏覽(22)
  • leetcode hot100 打家劫舍

    leetcode hot100 打家劫舍

    本題中,依舊可以發(fā)現(xiàn),當(dāng)前位置的金額受到前兩個位置金額是否被偷的影響,所以這明顯是動態(tài)規(guī)劃的問題。 我們采用動態(tài)規(guī)劃五部曲來進(jìn)行做 首先我們確定dp數(shù)組的含義:考慮下標(biāo)i(包括i)以內(nèi)的房屋,最多可以偷竊的金額為dp[i]。 注意,這里是考慮!那么就說明我這

    2024年02月19日
    瀏覽(16)
  • 【LeetCode熱題100】198. 打家劫舍(動態(tài)規(guī)劃)

    你是一個專業(yè)的小偷,計(jì)劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng), 如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。 給定一個代表每個房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你 不觸動

    2024年04月11日
    瀏覽(27)
  • 力扣hot100 打家劫舍 DP 滾動數(shù)組

    力扣hot100 打家劫舍 DP 滾動數(shù)組

    Problem: 198. 打家劫舍 ????? 參考地址 時間復(fù)雜度: O ( n ) O(n) O ( n ) 空間復(fù)雜度: O ( n ) O(n) O ( n ) 空間復(fù)雜度: O ( 1 ) O(1) O ( 1 )

    2024年01月19日
    瀏覽(19)
  • 【算法|動態(tài)規(guī)劃No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II

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

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

    2024年01月20日
    瀏覽(22)
  • 算法第十八天-打家劫舍Ⅱ

    算法第十八天-打家劫舍Ⅱ

    [打家劫舍Ⅱ]是說兩個相鄰的房間不能同時偷,并且首尾兩個房間是相鄰的(不能同時偷首尾房間) 明顯是基于[打家劫舍Ⅰ]做的升級。[打家劫舍Ⅰ]也是說兩個相鄰的房間不能同時偷,但是首尾房間不是相鄰的(可以同時偷首尾房間) 所以,我們先從[打家劫舍Ⅰ]開始說起。

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

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

    1.dp[i]:考慮下標(biāo)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)出來的,那么一定是從前到后遍歷! 進(jìn)一步對滾動數(shù)組

    2024年02月15日
    瀏覽(24)
  • 【算法】樹形DP ② 打家劫舍Ⅲ(樹上最大獨(dú)立集)

    【算法】樹形DP ② 打家劫舍Ⅲ(樹上最大獨(dú)立集)

    最大獨(dú)立集 需要從圖中選擇盡量多的點(diǎn),使得這些點(diǎn)互不相鄰。 337. 打家劫舍 III 用一個數(shù)組 int[] = {a, b} 來接收每個節(jié)點(diǎn)返回的結(jié)果 。返回值{a,b} a表示沒選當(dāng)前節(jié)點(diǎn)的最大值,b表示選了當(dāng)前節(jié)點(diǎn)的最大值。 使用 后序遍歷 dfs。 ( 發(fā)現(xiàn)樹形 DP 基本都是后序 dfs ) P1352 沒有上

    2024年02月12日
    瀏覽(27)
  • 打家劫舍系列

    打家劫舍系列

    ?

    2024年02月15日
    瀏覽(17)
  • _198打家劫舍

    _198打家劫舍 https://leetcode.cn/problems/house-robber/submissions/496496112/

    2024年01月18日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包