leetcode 337:House Robber III
来源:互联网 发布:补水面膜推荐 知乎 编辑:程序博客网 时间:2024/06/05 21:56
leetcode更新题目,又是一个入室盗窃。。。。
题目如下:
The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.
Determine the maximum amount of money the thief can rob tonight without alerting the police.
跟入室盗窃系列1和2差不多的思想,动态规划即可。然而,这个是树,不能像以前一样,一个vector+遍历搞定(事实上,不需要一个数组,两个int即可,一个记录前一个最大值,一个计记录前前个最大值)。
怎么办呢?思想一样,记录当前节点最大值以及当前节点下一层的最大值。因为是树,得递归,而且一次返回两个参数,不妨用结构体。用结构体保存两个参数,层层递归即可。
结构体定义如下:
typedef struct maxMoney{
int now;//全局最优,即包含根节点的最优
int pre;//不含根节点最优,即根节点下一层左子树和右子数的全局最优之和
}MAXMONEY;
CPP可AC代码如下:
class Solution {
public:
typedef struct maxMoney{
int now;//全局最优
int pre;//不含根节点最优
}MAXMONEY;
int max(int a,int b){
return a>b?a:b;
}
MAXMONEY robmoney(TreeNode* root){
MAXMONEY money;
money.now=0;
money.pre=0;
if (root==NULL)//空节点则返回值均为0
return money;
MAXMONEY moneyleft=robmoney(root->left);//递归求左子树
MAXMONEY moneyright=robmoney(root->right);//递归求右子树
money.now=max((root->val+moneyleft.pre+moneyright.pre),(moneyleft.now+moneyright.now));//全局最优
money.pre=moneyleft.now+moneyright.now;//不含根节点的最优
return money;
}
int rob(TreeNode* root) {
MAXMONEY money=robmoney(root);
return money.now;
}
};
- leetcode 337:House Robber III
- LeetCode 337 House Robber III
- 337 leetcode House Robber III
- 【LeetCode-337】House Robber III
- LeetCode[337] House Robber III
- LeetCode-337:House Robber III
- [LeetCode 337] House Robber III
- leetcode(337). House Robber III
- LeetCode House Robber III
- [LeetCode] House Robber III
- leetcode---House Robber III
- 《leetCode》:House Robber III
- [LeetCode]House Robber III
- [leetcode] House Robber III
- leetcode House Robber III
- LeetCode:House Robber III
- LeetCode House Robber III
- Leetcode | House Robber III
- java 获取时间并设置时间格式
- git遇到remote: fatal: early EOF + index-pack failed的处理方法
- Delphi 常用语句
- 目标检测的图像特征提取之(二)LBP特征
- 结合个人经历总结的前端入门方法
- leetcode 337:House Robber III
- 浅谈Java中父类与子类的加载顺序
- RegExp对象应用
- Java操作Excel
- WPF 快捷键读写txt
- 【Unity】尝试CardboardDemo打包apk
- mpu6050寄存器得到的原始数据处理
- 笔记-ArrayList的实现
- Ubuntu10.04下Android开发环境搭建