代码随想录算法训练营第三十九天-动态规划-337. 打家劫舍 III

news/2025/1/31 12:27:59 标签: 算法, 动态规划, c++, leetcode
  • 老师讲这是树形dp的入门题目
  • 解题思路是以二叉树的遍历(递归三部曲)再结合动规五部曲
  • dp数组如何定义:只需要定义一个二个元素的数组,dp[0]dp[1]
    • dp[0]表示不偷当前节点的最大价值
    • dp[1]表示偷当前节点后的最大价值
    • 这样可以把每个节点的状态值都表示出来
    • 但这个数组的两个值只表示当前节点的状态值
  • 递归时要使用后序遍历:
    • 使用后序遍历的原因就是要从叶子结点一层一层向上统计出来
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    int* binaryTreeRob(TreeNode* node) {
        if (node == nullptr) {
            return new int[2] {0, 0};
        }
        int* parr = new int[2] {0, 0};
        int* p_left = binaryTreeRob(node->left);
        int* p_right = binaryTreeRob(node->right);
        parr[1] = node->val + p_left[0] + p_right[0];
        parr[0] = std::max(p_left[0], p_left[1]) + std::max(p_right[0], p_right[1]);
        return parr;
    }
public:
    int rob(TreeNode* root) {
        int* arr = binaryTreeRob(root);
        return std::max(arr[0], arr[1]);
    }
};
  • 这种题能有这种解法,非常敬佩
  • 汇总

http://www.niftyadmin.cn/n/5838660.html

相关文章

SpringBoot AOP 和 事务

SpringBoot 整合 AOP 动态代理技术 JDK 动态代理 JDK 动态代理是 Java 自带的一种代理方式。它要求目标类必须有接口,基于这个接口,JDK 在运行时会动态生成一个代理对象。这个代理对象和目标对象就像 “拜把子” 的兄弟,因为它们都实现了相同…

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu,资源管理器中输入: \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录: /usr/local/arm,命令如下: …

如何构建树状的思维棱镜认知框架

在思维与知识管理中,“树状思维棱镜”通常指一种层级式、可多维度展开和不断深入(下钻)的认知框架。它不仅仅是普通的树状结构(如传统思维导图),更强调“棱镜”所体现的多视角、多维度切换与综合分析的能力…

简易计算器(c++ 实现)

前言 本文将用 c 实现一个终端计算器: 能进行加减乘除、取余乘方运算读取命令行输入,输出计算结果当输入表达式存在语法错误时,报告错误,但程序应能继续运行当输出 ‘q’ 时,退出计算器 【简单演示】 【源码位置】…

宇宙大爆炸是什么意思

根据宇宙大爆炸学说,宇宙间的一切都在彼此远离,而且距离越远,远离的速度越快。我们只能在地球上观察这种现象,而我们观察到的速度符合如下公式,其中 为哈勃常数, 为距离, 为速度(…

分享|通过Self-Instruct框架将语言模型与自生成指令对齐

结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限, 从而阻碍模型通用性的背景下, Self - Instruct 框架, 通过 自动生成 并 筛选指令数据 微调预训练语言模型, 有效提升了其指令遵循能…

【memgpt】letta 课程6: 多agent编排

Lab 6: Multi-Agent Orchestration 多代理协作 letta 是作为一个服务存在的,app通过restful api 通信 多智能体之间如何协调与沟通? 相互发送消息共享内存块,让代理同步到不同的服务的内存块

智慧“城市大脑”之城市安全运行方案

智慧“城市大脑”背景 随着城市化进程加速,城市安全运行成为重要议题。智慧“城市大脑”方案应运而生,依托先进物联网技术,旨在提升城市安全管理水平。 建设思路及原则 方案遵循“城市大脑”理念,打造“感”“传”“知”“用”…