My Eighty-third Page - 打家劫舍Ⅲ - By Nicolas
这篇page是针对leetcode上的337.打家劫舍Ⅲ所写的。小尼先简单的说明一下这道题的意思,就是我们这次偷取的房子是一个二叉树的形式表现出来的,这次引起报警的条件是我们如果连续偷了父节点和子节点,那么我们就会引发报警,我们需要求出的就是可以在不报警的条件下,我们可以偷取到的最大的金额为多少。
小尼先简单的说明一下这道题的解题思路,首先其实就是需要分析递归三部曲:
1、确定递归函数的参数和返回值:这里我们要求一个节点偷于不偷的两个状态所得到的金钱,那么返回值就是一个长度为2的数组,所以我们在这里设定dp数组以及下标的含义:下标为0记录不偷节点所得到的最大金钱,下标为1记录偷该节点所得到的最大金钱
2、确定终止条件:如果我们遇到了空节点,无论偷还是不偷都是0
3、确定遍历顺序:我们采用后续便利
小尼接下来拉一下这道题的集体的代码:
public int rob1(TreeNode root) {Map<TreeNode, Integer> memo = new HashMap<>();return robAction(root, memo);}int robAction(TreeNode root, Map<TreeNode, Integer> memo) {if (root == null)return 0;if (memo.containsKey(root))return memo.get(root);int money = root.val;if (root.left != null) {money += robAction(root.left.left, memo) + robAction(root.left.right, memo);}if (root.right != null) {money += robAction(root.right.left, memo) + robAction(root.right.right, memo);}int res = Math.max(money, robAction(root.left, memo) + robAction(root.right, memo));memo.put(root, res);return res;}
首先呢上面这一段代码没有运用小尼上述的dp定义一个人数组进行比较偷或是不偷,这个方法就是直接采取递归的方法对我们的值进行对应的相加记录,最后我们只需要max取值即可
接下来小尼拉一下采取dp数组分析0、1情况的代码:
public int rob3(TreeNode root) {int[] res = robAction1(root);return Math.max(res[0], res[1]);}int[] robAction1(TreeNode root) {int res[] = new int[2];if (root == null)return res;int[] left = robAction1(root.left);int[] right = robAction1(root.right);res[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);res[1] = root.val + left[0] + right[0];return res;}
}
这一段就是我们采取分析,我们定义的res数组,如果里面的元素取0的时候就是我们此时的root值是不偷的,如果元素取1代表着我们的root是一定会取的,所以我们在取值的时候,我们不断的递归取值,最后在主方法里进行一个max的取值得到最后的数值。
希望上面的分析和代码可以帮助到小伙伴们~~~
My Eighty-third Page - 打家劫舍Ⅲ - By Nicolas相关推荐
- My Hundredth Page - 回文子串 - By Nicolas
这篇page是针对leetcode上的647.回文子串所写的.小尼先简单的说明一下这道题的意思,就是给定一个字符串s,需要统计出这个字符串中回文子串的数目,回文子串的定义就是正着读和倒过来读是一样的字 ...
- My Seventh Page - 设计链表 - By Nicolas
这一篇page对应的是leetcode上面707.设计链表这个题目,首先这个题目的描述还是比较简单的,就是我们可以选择使用单链表或者双链表实现链表对应的增删改查的许多功能.小尼这个题目大部分都是看的题 ...
- My Eighty-sixth Page - 买股票的最佳时机Ⅲ - By Nicolas
这篇page是针对leetcode上的123.买股票的最佳时机Ⅲ所写的.小尼先简单的说明一下这道题的意思,就是我们给定一个数组,它的第i个元素表示的是一支股票在第i天的价格,我们需要设计一个算法表示我 ...
- My Eighty-seventh Page - 买卖股票的最佳时机 - By Nicolas
这篇page是针对leetcode上的188.买卖股票的最佳时机Ⅳ所写的.小尼先简单的说明一下这道题的意思,就是我们给定一个整数数组prices,它的第i个元素prices[i]是一支给的股票在第i天 ...
- My Fourteenth Page - 两个数组的交集 - By Nicolas
今天的这篇page针对的时leetcode上的349.两个数组的交集写的,小尼首先简单说明一下这道题的要求,给点两个数组nums1和nums2.,返回他们的交集,输出结果中的每个元素一定是唯一的. 首 ...
- My Twenty-Fourth - Page - 逆波兰表达式求值 - By Nicolas
这篇page是针对leetcode上的150.逆波兰表达式这道题所写的,小尼先简单说明一下这道题的意思,这道题先是介绍了有效的运算符包括"+","-",&quo ...
- My Twenty-Eighth Page - 滑动窗口最大值 - By Nicolas
这篇page是针对leetcode上的239.滑动窗口的最大值所写的.小尼先简单的说明一下这道题的题意,给出一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧,需要返回滑动 ...
- My Twentieth Page - 用栈实现队列 - By Nicolas
这篇page是针对leetcode上的232.用栈实现队列这道题所写的,小尼先简单的说明一下这道题,就是利用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.em ...
- My Ninetieth Page - 最长递增子序列 - By Nicolas
这篇page是针对leetcode上的300.最长递增子序列所写的.小尼先简单的说明一下这道题的意思,给定一个整数数组nums,我们需要找到其中最长严格递增子序列的长度.其中子序列是由数组派生而来的序 ...
- My Eighty-ninth Page - 买卖股票的最佳时机含手续费 - By Nicolas
这篇page是针对leetcode上的714.买卖股票的最佳时机含手续费所写的.小尼先简单的说明一下这道题的意思,就是给定一个整数数组prices,其中prices[i]表示第i天的股票价格,整数fe ...
最新文章
- unity不规则碰撞_Unity UGUI学习系列(二) ------ PolygonCollider2D实现不规则碰撞范围
- Android开发之使用Android studio进行两个项目合并的方法
- Access denied for user 'root'@'localhost' (using password: YES) 问题解决小记
- python爬取网页新闻_Python爬取新闻网数据
- 浮点数转换为整数四舍五入_定义宏以将浮点值四舍五入为C中最接近的整数
- 安装pytorch步骤
- 一篇个人认为对RNN写的比较好的文章
- App Store、Steam、Google Play等出海应用、游戏如何收款到国内账户
- 关于网站中Logo部分的写法
- Intel E810 DDP在VPP offload加速框架中的应用
- 2016年C语言专业课,2016-2018年中央财经大学C语言程序设计考研真题及答案解析(6)...
- 使用 Python 生成迷宫
- Clickhouse外部储存表引擎(HDFS、MySQL、JDBC、Kafka、File)
- 前端开发vue技术栈程序员的vs code插件分享
- cPanel WHM 安装教程
- 批量修改DNS记录的TTL值
- 外边距塌陷原因和解决方式
- 解决mac系统下载nrm插件,权限不够的问题
- Sanitize小知识
- atrix 4g linux,这货还是手机?摩托神器Atrix 4G试玩图赏
热门文章
- “数据打通”不等于“数据共融”,智能数据营销解决方案了解一下
- C++_深浅拷贝详解
- oracle实验三创建视图,实验1——Oracle数据查询
- 跳出舒适区发现更大的世界,来社科院杜兰金融管理硕士项目汲取能量挑战自我
- “无纸化”乘机,二维码登机牌
- 回想那些年我抛弃的技术
- Windows XP SP3版本美化成Vista界面详解
- Matlab App Designer自学笔记(三):利息计算器案例
- 2017年第22届中国国际涂料、油墨及粘合剂展览会会刊(参展商名录)
- MovieClip序列帧动画 视频教程