代码随想录第四十八天 | 198.打家劫舍, 213.打家劫舍II,337.打家劫舍III

198.打家劫舍

看完想法:这里的偷/不偷,和背包问题中的放/不放感觉是一个道理,所以在dp递推公式中仍旧使用max(dp[i-2] + nums[i], dp[i-1])

int rob(vector<int>& nums) {vector<int> dp(nums.size()+1,0);if(nums.size()==0) return 0;if(nums.size()==1) return nums[0];dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);//0和1的情况要单独用if列出,所以这里起始点是i=2for(int i = 2; i<nums.size(); i++){dp[i] = max(dp[i-2] + nums[i], dp[i-1]);}return dp[nums.size()-1];}

213.打家劫舍II

看完想法:考虑首尾元素不能同时选的情况,我们分只选首元素和尾元素的情况,这两种情况都算一个dp,然后取最大值就可以。为什么dp不为nums.size() + 1呢?因为dp定义是考虑i之内的房屋,不必要使用

int rob(vector<int>& nums) {if (nums.size() == 0) return 0;if (nums.size() == 1) return nums[0];int dp1 = robRange(nums, 0, nums.size() - 2);//只考虑首部元素的情况int dp2 = robRange(nums, 1, nums.size() - 1);//只考虑首部元素的情况int result = max(dp1, dp2);return result;}//不要囿于实际dp数组的思路,这里是写函数,参数用形参int robRange(vector<int>& nums, int start, int end){vector<int> dp(nums.size());if(start == end) return nums[start];//记得初始化dp[start] = nums[start];dp[start + 1] = max(nums[start], nums[start + 1]);for(int i = start+2; i<=end; i++){dp[i] = max(dp[i-1], dp[i-2] + nums[i]);}return dp[end];}

337.打家劫舍III

看完想法:对于树的话,首先就要想到遍历方式,前中后序(深度优先搜索)还是层序遍历(广度优先搜索)不记得快去复习一下知识点。解题从递归树的递归三部曲来解题。因为题目中考虑了偷或者不偷两种结果,那最终程序输出取什么呢?当然是取最大的啦,和递归顺序中取偷/不偷的逻辑是一样的。最近面试被问到了时间复杂度,做题的时候还是要分析一下。


class Solution {
public:vector<int> robTree(TreeNode* cur){//确定终止条件if(cur == nullptr) return vector<int>{0,0};//递归顺序vector<int> left = robTree(cur->left);vector<int> right = robTree(cur->right);// 偷cur,那么就不能偷左右节点,所以是left[0] + right[0]int val1 = cur->val + left[0] + right[0];// 不偷cur,那么可以偷也可以不偷左右节点,则取left/right中偷不偷较大的情况int val2 = max(left[0], left[1]) + max(right[0], right[1]);return {val2, val1};}int rob(TreeNode* root) {vector<int> result = robTree(root);return max(result[0], result[1]);}

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

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

相关文章

参数手册 : PXIe-1095

PXIe-1095 起售价 RMB 97,950.00 产品详细信息 PXI机箱类型: PXIe 机箱电源类型: 交流 混合插槽数量: 5 PXI Express插槽数量: 11 冗余硬件选项: 是 最大系统带宽: 24 GB/s 插槽数量: 18 PXI插槽数量: 0 系统定时插槽: 是 槽冷却能力: 82 瓦 简介 PXIe&#xff0c;18槽&am…

HTML5表单的自动验证、取消验证、自定义错误信息

1、自动验证 通过在元素中使用属性的方法&#xff0c;该属性可以实现在表单提交时执行自动验证的功能。下面是关于对元素内输入内容进行限制的属性的指定。 属性说明required输入内容是否不为空pattern输入的内容是否符合指定格式min、max输入的数值是否在min~max范围step判断…

一文清晰了解CSS

一、基本概念 1.定义 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;前面说了CSS是一种用于描述网页内容外观和样式的标记语言。 具体地&#xff0c;它通过选择器将样式规则应用到HTML元素上&#xff0c;控制网页的布局、颜色、字体等…

揭秘“消费即赚”的循环购模式

大家好&#xff0c;我是吴军&#xff0c;今天我将带您深入探索一种颠覆传统的新型商业模式——循环购模式。在这个模式中&#xff0c;消费者不仅能享受到购物的乐趣&#xff0c;还能通过消费获得实实在在的回报&#xff0c;甚至实现“边消费边赚钱”的奇妙体验。您是否好奇&…

JS常用正则校验大全

1、手机号(mobile phone)中国(严谨), 根据工信部2019年最新公布的手机号段 const reg /^(?&#x1f626;?:|00)86)?1(?&#x1f626;?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/; const str “19119255642”; consol…

通过函数来实现复数相加

在之前的的文章中介绍过函数重载&#xff0c;已经接触到重载&#xff08;overloading&#xff09;这个名词。所谓重载&#xff0c;就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义&#xff0c;使之实现新的功能。因此&#xff0c;同一个函数名就可以用来代表不…

vscode复制文件:行号

File Line Reference 插件可以复制文件名加行号&#xff0c;还可以将选中函数名进行复制&#xff0c;比较方便 w alt y (Windows) , ctrl y (macOS)复制行号加文件名 alt u (Windows) or ctrl u (macOS)复制带有选定行号文件名&#xff0c;函数名需要选中才行 查找文件&…

若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)

参考文章&#xff0c;非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word&#xff08;一&#xff09; 效果图 审核时&#xff0c;输入框高亮敏感词&#xff…

变阻器的分类

变阻器作为用于调节电路中电阻值的电子元件&#xff0c;在电子电路中具有广泛的应用。根据不同的工作原理和结构形式&#xff0c;变阻器可以分为多种类型。以下是对变阻器分类的详细阐述&#xff1a; 一、按工作原理分类 电位器是一种通过滑动端位置调节电阻值的变阻器&#x…

C++中 Debug和Release的区别

在C/C编程领域&#xff0c;Debug和Release是两种截然不同的编译模式&#xff0c;它们分别服务于不同的开发阶段和目标。理解这两种模式的区别不仅对于提高开发效率至关重要&#xff0c;还直接影响到最终产品的性能和质量。本文将深入探讨C/C中Debug和Release模式的区别&#xf…

Noah-MP陆面生态水文模拟与多源遥感数据同化

陆面模型在生态水文研究中的地位和作用&#xff1b;熟悉模型的发展历程&#xff0c;常见模型及各自特点&#xff1b;理解Noah-MP模型的原理&#xff0c;掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法&#xff1b;课程还将深入讲解数据同化的原理…

6-添加自定义命令和生成的文件

本文使用的示例代码见1-简单开始cmake实践-CSDN博客。 假设&#xff0c;出于本教程的目的&#xff0c;我们决定不使用平台log和exp函数&#xff0c;而是希望生成一个预先计算值的表&#xff0c;以便在mysqrt函数中使用。在本节中&#xff0c;我们将创建表作为构建过程的一部分&…

1区老牌神刊,仅37天录用!网友:“这审稿速度救了我一条命”!

关注GZH【欧亚科睿学术】&#xff0c;GET完整版2023JCR分区列表&#xff01; ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 期刊信息概况 【期刊类型】计算机科学类SCIE&EI 【出版社】ELSEVIER出版社 【期刊概况】IF&#xff1a;4.0-5.0&#xff0c;JCR1区&#xff0c;中科院3区…

用 Dockerfile 创建镜像的基本步骤有哪些?

使用 Dockerfile 创建镜像的基本步骤如下&#xff1a; 定义基础镜像 在 Dockerfile 的开头&#xff0c;使用 FROM 指令指定一个基础镜像。例如&#xff1a; FROM ubuntu:latest这表示基于最新的 Ubuntu 镜像来构建。 安装依赖和软件 使用 RUN 指令来执行命令&#xff0c;安装…

电脑文件xinput1_3.dll丢失要怎么修复win10?一键解决xinput1_3.dll丢失的方法

电脑文件xinput1_3.dll丢失要怎么修复win10&#xff1f;其实无论是哪种系统&#xff0c;是不是win10其修复方法都是大同小异&#xff0c;不过在修复xinput1_3.dll文件之前&#xff0c;首先我们要先了解这个xinput1_3.dll文件&#xff0c;只有了解了&#xff0c;那么才可以快速的…

奇瑞新能源车型EQ2在驾校领域的CAN总线数据应用

在当今这个快速发展的汽车时代&#xff0c;科技的进步不仅推动了汽车性能的提升&#xff0c;也为驾驶培训领域带来了革命性的变化。其中&#xff0c;奇瑞EQ2作为一款电动汽车&#xff0c;其在驾校领域的应用尤其值得关注&#xff0c;特别是其采用的CAN总线技术。CAN总线&#x…

【productj服务导出文件503问题】

设备服务只要导出文件&#xff0c;就报503&#xff0c;查看K8S发现服务重启 1. 复现问题1.1 问题复现频繁fullGC 宿主pod服务日志监控1.2 小内存复现 接口没啥问题&#xff0c;导出就会导致服务重启 1. 复现问题 当前uat环境配置&#xff1a; pod内存&#xff1a;2G JVM参数&a…

Python 利用pandas处理CSV文件(DataFrame的基础用法)

前面介绍过通过Python标准库中的CSV模块处理CSV文件&#xff1a; Python 利用CSV模块处理数据 相比CSV模块&#xff0c;pandas的功能更加强大&#xff0c;本文将简单介绍如何通过pandas来处理CSV文件。 文章目录 一、pandas简介二、用法示例2.1 读取CSV文件2.1.1 read_csv参数…

设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)

创建型模式 单例模式&#xff08;Singleton Pattern&#xff09; 单例模式&#xff08;Singleton Pattern&#xff09;在Java中的使用场景与在其他编程语言中类似&#xff0c;其主要目的是确保一个类只有一个实例&#xff0c;并提供一个全局的访问点。以下是单例模式的一些常…

现代化3D Web轻量引擎HOOPS Communicator:基于ESM的代码库转型!

HOOPS Communicator自2024.2.0版本起&#xff0c;向基于ECMAScript Modules (ESM)的系统迁移的决策和技术细节。文章分析了这一转型对代码组织、封装、依赖管理、性能以及与现代JavaScript开发实践兼容性的积极影响&#xff0c;并讨论了IIFE和UMD的兼容性支持。 引言 随着Jav…