​LeetCode解法汇总337. 打家劫舍 III

news/2024/7/1 5:29:13

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

GitHub - September26/java-algorithms: 算法题汇总,包含牛客,leetCode,lintCode等网站题目的解法和代码,以及完整的mode类,甚至链表代码生成工具都有提供。

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

示例 1:

输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7

示例 2:

输入: root = [3,4,5,1,3,null,1]
输出: 9
解释: 小偷一晚能够盗取的最高金额 4 + 5 = 9

提示:

  • 树的节点数在 [1, 104] 范围内
  • 0 <= Node.val <= 104

解题思路:

* 解题思路:

* 动态规划的思路,求每个节点可能的最大值。

* 每个节点的最大值有两种可能,1:当前节点+孙节点之和,2:子节点之和。两者之间较大的为当前节点的可能最大值。

代码:

class Solution337
{
public:
    int getValue(TreeNode *node)
    {
        if (node == nullptr)
        {
            return 0;
        }
        return node->val;
    }

    int getMaxValue(TreeNode *root)
    {
        int sum = root->val;
        int childSum = 0;
        if (root->left != nullptr)
        {
            childSum = getMaxValue(root->left);
            sum += getValue(root->left->left);
            sum += getValue(root->left->right);
        }
        if (root->right != nullptr)
        {
            childSum += getMaxValue(root->right);
            sum += getValue(root->right->left);
            sum += getValue(root->right->right);
        }
        root->val = max(sum, childSum);
        return root->val;
    }

    int rob(TreeNode *root)
    {
        getMaxValue(root);
        return root->val;
    }
};


http://lihuaxi.xjx100.cn/news/1561279.html

相关文章

沉降安全监测之静力水准仪安装与精度分析

静力水准仪的安装使用步骤如下&#xff1a; 1、选择合适的安装位置&#xff1a;静力水准仪应该安装在平稳且不易受到外力影响的地面上&#xff0c;以确保测量结果的准确性。同时&#xff0c;应避免安装在有风的地方&#xff0c;因为风会影响水准仪的读数。 2、安装支架&#…

N皇后问题-(递归回溯)

牛客网 BM59. 解题思路&#xff1a; 行列、斜叉不在一条直线上。 命令行为 row, 列为col, row 从0开始递归直到最后一行&#xff0c;列从0开始遍历&#xff0c;直到最后一列&#xff0c;中间每一步记录或清除位置状态&#xff0c;状态分为 m1[col] 1, m2[row-col] 1, m3[r…

jvm深入研究文档--java中的堆--详解!--jvm底层探索(1)

阿丹&#xff1a; JVM的内存分区包括以下几个部分&#xff1a; 堆区&#xff08;Heap&#xff09; - 这是JVM的主要部分&#xff0c;用于存储实例对象和大多数Java对象&#xff0c;如数组和用户定义的类。方法区&#xff08;Method Area&#xff09; - 这是线程私有的&#x…

sourcetree 配置 gitlab ssh及公钥私钥设置

参考链接&#xff1a;Mac sourcetree 配置 ssh 密钥 - 简书 1.打开sourcetree --新建--从URL克隆&#xff0c;复制你项目的ssh 链接添加进去&#xff0c;如果没有配置就会提示&#xff1a; 这是一个无效的源路径/URL 2.打开sourcetree的设置 3.账户--添加 4.如图输入&#xf…

Ubantu 安装中文输入法

2、通过命令行安装搜狗输入法 sudo dpkg -i sogoupinyin_版本号_amd64.deb 注&#xff1a; 如果安装过程中提示缺少相关依赖&#xff0c;则执行如下命令解决&#xff1a; sudo apt -f install 3、注销计算机即可正常使用搜狗输入法 Ubuntu20.04安装搜狗输入法步骤 1、更…

二叉树的建立和前序,中序,后序,遍历(给定节点以及其之间的关系)

其中键值对的建立最为关键&#xff0c;不熟悉unorder_maphttps://blog.csdn.net/zou_albert/article/details/106983268?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169528103016800211567279%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&…

alist windows桌面版下载安装

官网 Desktop | AList Docs 点击下载windows版本 安装 双击exe 修改安装路径 太可惜了&#xff0c;需要收费

安装清华源到你的 Python 环境中

有时候我们下载包的时候非常慢&#xff0c;加个清华源速度可以提高&#xff0c;但是如果每次安装包都需要在前面加一个清华源的链接就比较麻烦。 所以可以尝试下面的方法&#xff1a; 首先 你需要安装 pip 的镜像源到你的 Python 环境中&#xff0c;以便从清华大学镜像站下载软…