代码随想录算法训练营Day48|LC198 打家劫舍LC213 打家劫舍IILC337 打家劫舍III

一句话总结:前两题白给,第三题树形DP有点难。

原题链接:198 打家劫舍

滚动数组直接秒了。

class Solution {public int rob(int[] nums) {int n = nums.length;int first = 0, second = nums[0];for (int i = 2; i <= n; ++i) {int tmp = Math.max(first + nums[i - 1], second);first = second;second = tmp;}return second;}
}

原题链接:213 打家劫舍II 

 

条件与上一题差不多,多了一个房屋成环的限制,那么只需要考虑两个可能性:

  1. 偷第0家,那么剩下可偷的房屋就从第2到第n - 2家里面选择;
  2. 不偷第0家,那么剩下的就从第1到第n - 1家里面选择。

剩下的房屋里的选择与上一题类似。最后得到两种可能性的最大值,返回即可。

class Solution {public int rob(int[] nums) {int n = nums.length;return Math.max(nums[0] + rob(nums, 2, n - 1), rob(nums, 1, n));}private int rob(int[] nums, int start, int end) {int first = 0, second = 0;for (int i = start; i < end; ++i) {int tmp = Math.max(second, first + nums[i]);first = second;second = tmp;}return second;}
}

原题链接:337 打家劫舍III

原分析在此处。这里涉及到递归和动态规划的结合。利用动规五部曲和递归三步逐步分析如下:

  • 首先要考虑对树的遍历方式是前中后还是层序,这里需要后序遍历,往根节点的计算过程需要子节点的计算参与; 
  • 然后确定递归函数的参数和返回值。对于某一具体节点房屋,只有选择偷和不偷两种状态,因此该递归函数的返回值为长度为2的数组;同时,参数即为当前节点。其实,这里返回的数组即为dp数组,由于递归的存在,递归过程中系统会将前面每一层的参数保存起来。
  • 再就是确定递归的终止条件。在遍历遇到空节点时,无论偷不偷,当前节点返回的值都将会是0,因此这里的递归终止条件即为:
    if (cur == null) return new int[2];

    这里其实也就相当于对dp数组做了初始化。

  • 紧接着需要确定的是动态规划过程中的遍历顺序。之前已经确定了要用后序遍历,因此遍历顺序为:通过递归遍历左子节点,获得偷或者不偷左子节点的金钱;通过递归遍历右子节点,获得偷或者不偷右子节点的金钱。

  • 之后是确定单层递归的逻辑。如果选择偷当前节点,那么该节点的左右子节点就不能偷,于是有:val1 = cur.val + left[0] + right[0]; 如果选择不偷当前节点,那么该节点的左右子树就可以偷,具体偷不偷则要取决于最大化对该子节点的收益,即有:val2 = Math.max(left[0], left[1]) + Math.max(right[0], right[1])。这样即可得出当前节点的状态为:{val1, val2}。

以上即是分析过程,最后代码如下:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int rob(TreeNode root) {int[] ans = robTree(root);return Math.max(ans[0], ans[1]);}private int[] robTree(TreeNode root) {if (root == null) return new int[2];int[] left = robTree(root.left);int[] right = robTree(root.right);int val1 = root.val + left[0] + right[0];int val2 = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);return new int[]{val2, val1};}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何开始用 C++ 写一个光栅化渲染器?

光栅化渲染器是计算机图形学中最基础且广泛应用的一种渲染技术&#xff0c;它将三维模型转化为二维图像。下面我们将逐步介绍如何使用C语言从零开始构建一个简单的光栅化渲染器。 一、理解光栅化渲染原理 光栅化是一种将几何数据&#xff08;如点、线、三角形&#xff09;转换…

电商选品难?那是因为你不会用大数据选品工具…

电商选品之所以难&#xff0c;主要有以下几个方面的原因。电商市场更新换代非常快&#xff0c;新的产品不断涌现&#xff0c;旧的产品可能很快就被淘汰。电商选品紧跟市场趋势&#xff0c;不断调整和更新&#xff0c;这对电商运营市场敏感度和反应速度提出了很高的要求。 电商…

110V降9V1A非隔离降压恒压WT5112

110V降9V1A非隔离降压恒压WT5112 嘿&#xff0c;让我来给你说说这个WT5112控制芯片。这可是个厉害的东西&#xff0c;特别适合用在充电器啊、适配器啊还有LED灯这些地方。它最牛的地方就是能稳稳地控制电压和电流&#xff0c;而且还有个什么原边反馈技术让控制得更准。更酷的是…

MySQL_00001_00000

数据准备 员工表&#xff1a;emp Oracle: create table emp ( empno number(4) not null, ename varchar2(10), job varchar2(9), mgr number(4), hiredate date, sal number(7, 2), comm number(7, 2), deptno number(2) ); insert into em…

数据库讲解---(SQL语句--表的使用)【MySQL版本】

零.前言 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第一章】-CSDN博客 数据库-ER图教程_e-r图数据库-CSDN博客 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第二章】【上】-CSDN博客 一.SQL概述 1.1SQL简…

组合逻辑电路中的竞争与冒险

竞争与冒险 进行理想的组合逻辑电路分析与设计时&#xff0c;没有考虑逻辑门的延迟时间&#xff08;原因&#xff09;对电路产生的影响&#xff0c;且认为电路的输入和输出均处于稳定的逻辑电平。 实际上&#xff0c;信号经过逻辑门需要一定的时间。不同路径上门电路数目不同…

【Qt】文件与音视频

目录 一、输入输出设备类 二、文件读写类 三、文件和目录信息类 四、音视频 4.1 音频 4.2 视频 文件操作是应用程序必不可少的部分。Qt作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作…

杂谈 EV之我见

每周至少更新一片博文&#xff0c;没有目的的看代码是没有效率的&#xff0c;带着目的去看代码才会有所得&#xff0c; 目前车载行业火爆&#xff0c;得益于EV和AI技术的发展&#xff0c;汽车从一个传统工业产品&#xff0c;摇身一变成为了前沿科技产品。 小米su7的发布会我看…

LeetCode刷题之94.二叉树中序遍历

文章目录 1. 描述2. 分析2.1 递归方法2.2 迭代 3. 解答3.1 递归3.2 迭代 1. 描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;ro…

C++ //练习 12.3 StrBlob需要const版本的push_back和pop_back吗?如果需要,添加进去。否则,解释为什么不需要。

C Primer&#xff08;第5版&#xff09; 练习 12.3 练习 12.3 StrBlob需要const版本的push_back和pop_back吗&#xff1f;如果需要&#xff0c;添加进去。否则&#xff0c;解释为什么不需要。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1…

浏览器工作原理与实践--页面性能:如何系统地优化页面

在前面几篇文章中&#xff0c;我们分析了页面加载和DOM生成&#xff0c;讨论了JavaScript和CSS是如何影响到DOM生成的&#xff0c;还结合渲染流水线来讲解了分层和合成机制&#xff0c;同时在这些文章里面&#xff0c;我们还穿插说明了很多优化页面性能的最佳实践策略。通过这些…

【C语言】扫雷小游戏

文章目录 前言一、游戏玩法二、创建文件test.c文件menu()——打印菜单game()——调用功能函数&#xff0c;游戏的实现main()主函数 game.c文件初始化棋盘打印棋盘随机布置雷的位置统计周围雷的个数展开周围一片没有雷的区域计算已排查位置的个数排查雷(包括检测输赢): game.h文…

【剪映专业版】04全局设置

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 设置-全局设置 草稿 草稿位置&#xff1a;非系统盘&#xff08;C盘&#xff09; 素材下载位置与 缓存管理&#xff1a;如果下载素材较多&#xff0c;需要定期删除缓存 预设保存位置&#xff1a;非系统盘&#xff08;C盘&a…

JavaScript exec、test和eval方法的使用

一、exec() 1.概述&#xff1a; exec()方法测试字符串中的匹配项。该方法是通用的匹配模式。如果找到匹配项&#xff0c;则返回结果数组&#xff0c;否则返回 null。 2.语法 /*** exec方法说明* param {String} string 必需。要搜索的字符串。* return {Array||Object} r…

动手学深度学习-关于y.sum().backward()中sum的理解

一、原文出处 2.5.2. 非标量变量的反向传播 当y不是标量时&#xff0c;向量y关于向量x的导数的最自然解释是一个矩阵。 对于高阶和高维的y和x&#xff0c;求导的结果可以是一个高阶张量。 然而&#xff0c;虽然这些更奇特的对象确实出现在高级机器学习中&#xff08;包括深度学…

基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构

简介 基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构。并引入组件化的思想实现高内聚低耦合并且高度可配置化&#xff0c;适合学习和企业中使用。 真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案&#x…

C语言操作符详解(二)

一、位操作符 & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 注意&#xff1a;它们的操作数必须是整数。 下面的码我都只取了后八位 1.1、按位与 使用补码进行按位与 规则:对应二进制位有0就是0,两个同时为1才为1. 1.2、按位或 使用补码进行按位或 规则:对应二进…

GESP C++六级认证真题 2024年3月

C 六级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 在构建哈夫曼树时&#xff0c;每次应该选择&#xff08; &#xff09;合并。 A. 最小权值的节点 B. 最大权值的节点 C. 随机节点 D. 深度最深的节点 第 2 题 面向对象的编程思想主…

【攻防世界】Web_python_template_injection

{{}}是变量包裹标识符&#xff0c;里面存放的是一个变量&#xff0c;当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功&#xff0c;说明存在模版注入。接下来&#xff0c;开始想办法编代码拿到服务器的控制台权限 。 首先&#xff0c;题目告诉我们这是一个 python 注入…

2024年教师资格考试真题及答案1

一、选择题 11.刚被学校领导批评过的宋老师郁闷地走进教室&#xff0c;看见几个学生在大声喧哗&#xff0c;便不分青红皂白地将他们训斥了一番。该做法体现了宋老师&#xff08;&#xff09;。 A.不能平等待生 B.不能调适自我 C.不能严慈相济 D.不能有教无类 答案&#x…