当前位置: 首页 > news >正文

leetcode 337. 打家劫舍 III

题目链接:leetcode 337

1.题目

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

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

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

2.示例&数据范围

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

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

3)提示:
树的节点数在 [1, 104] 范围内
0 <= Node.val <= 104

3.分析

本质上是一个树状dp问题,可以使用两个unordered_map来存储当前根节点被选取/未被选取的最高金额,然后左子树和右子树递推即可

4.代码

/*** 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 {
public:int ans=0;unordered_map <TreeNode*, int> f,g;void get_dfs(TreeNode* root){if(root==NULL) return;int fx=0,fy=0,rx=0,ry=0;get_dfs(root->left);get_dfs(root->right);if(root->left!=NULL){fx=f[root->left];rx=g[root->left];}if(root->right!=NULL){fy=f[root->right];ry=g[root->right];}f[root]=max(fx,rx)+max(fy,ry);g[root]=fx+fy+root->val;}int rob(TreeNode* root) {get_dfs(root);return max(f[root],g[root]);}
};
http://www.lryc.cn/news/68569.html

相关文章:

  • 基于Docker的深度学习环境NVIDIA和CUDA部署以及WSL和linux镜像问题
  • c#中slice,substr,substring区别
  • java语言里redis在项目中使用场景,每个场景的样例代码
  • Mongo集合操作
  • ConvTranspose2d 的简单例子理解
  • 酒精和肠内外健康:有帮助还是有害?
  • SylixOS Shell下操作环境变量方法
  • 【dfs解决分组问题-两道例题——供佬学会!】(A元素是放在已经存在的组别中,还是再创建一个更好?--小孩子才做选择,dfs直接两种情况都试试)
  • 使用Hexo在Github上搭建个人博客
  • 【面试题】面试官:说说你对 CSS 盒模型的理解
  • 【ROS2】学习笔记
  • Springboot +Flowable,流程表单应用之外置表单(JSON形式)(二)
  • JavaScript如何使用if语句
  • XSS攻击以及java应对措施
  • yolo 训练
  • 谷歌chrome浏览器升级新版后字体显示不清楚解决方案
  • 在外包干了三年,我废了……不吹不黑!
  • 【Vue】学习笔记-消息的订阅与发布
  • 大疆无人机 MobileSDK(遥控器/手机端)开发 v5版<1>
  • azkaban介绍
  • 自学黑客(网络安全)必学内容
  • Java每日一练(20230518) 移除元素、跳跃游戏II、复原IP地址
  • diff命令和vimdiff命令
  • AcWing 797.差分(C++)
  • Python每日一练(20230515) 只出现一次的数字 I\II\III
  • 基于【EasyDL】【图像分类】实现农作物病害识别小程序
  • 元宇宙又“死”了!Epic老板:你当6亿用户是摆设?
  • 阶段小结2022
  • linux0.12-8-11-vsprintf.c
  • Node.js 与 WebAssembly