代码随想录算法训练营第四十四天|LeetCode198 打家劫舍、LeetCode213 打家劫舍Ⅱ

题1:

指路:198. 打家劫舍 - 力扣(LeetCode)
思路与代码:

对于这个题,拿房屋i举例,我们需要考虑的是否确定偷取这个房屋,如果确定偷取这个房屋,那么我们将得到房屋i的金币也就是nums[i],但是因为不能偷取相邻的房屋,那么得到nums[i]和前i-2个房屋最大金币数的同时失去的是nums[i-1],否则不偷取这个房屋,那么考虑偷取的就是第i-1个房屋。这里我们就需要判断这两种情况那种得到的金币最多。特殊情况,当房屋门下标是0时,此时一定会偷取这仅有的一间,那么此时金币数为nums[0],当房屋下标为1时,我们需要判断第0间房屋和第1间房屋的较大值,得到较大的金币数。首先,定义一个数组dp[i],其含义为考虑下标为i在内(包括i)的房屋之前能够偷得的最大的金币数;其次我们尝试得出递推公式,前面分析题意阶段已经有提到过dp[i]应该取确定偷取第i间房屋和确定不偷取第i间房屋的较大值,也就是dp[i]=max(nums[i] + dp[i - 2], dp[i - 1]);然后对dp数组进行初始化,我们在前面也提到过,即dp[0]=nums[0],dp[1]=max(nums[0], nums[1]);接着我们确定遍历顺序,这个题的遍历顺序显而易见,从小到大即可,也就是从下标为2到nums.size();最后打印dp数组即可。代码如下:

class Solution {
public:int rob(vector<int>& nums) {if (nums.size() == 0) return 0;if (nums.size() == 1) return nums[0];vector<int> dp(nums.size());dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);for (int i = 2; i < nums.size(); i++) {dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[nums.size() - 1];}
};

题2:

指路:213. 打家劫舍 II - 力扣(LeetCode)
思路与代码:

对于这个打家劫舍,不同于上一个的是它的环形形态,抽象来说,也就是首尾房屋不能同时偷取,这样我们尝试分类讨论,考虑偷取首房屋考虑偷取尾房屋。那么,中间不带首尾房屋的情况就是我们上一题的打家劫舍。在public中讨论考虑两种偷取方式的结果取较大值即可。代码如下:

class Solution {
public:int rob(vector<int>& nums) {if (nums.size() == 0) return 0;if (nums.size() == 1) return nums[0];int result1 = robRange(nums, 0, nums.size() - 2);  //考虑左边界int result2 = robRange(nums, 1, nums.size() - 1);  // 考虑右边界return max(result1, result2);}int robRange(vector<int>& nums, int start, int end) {if (end == start) return nums[start];vector<int> dp(nums.size());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 - 2] + nums[i], dp[i - 1]);}return dp[end];}
};

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

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

相关文章

QT-QPainter实现一个动态充电的电池

1、效果 2、核心代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer>

php反序列化的一些知识

问题 <?php $raw O:1:"A":1:{s:1:"a";s:1:"b";}; echo serialize(unserialize($raw)); //O:1:"A":1:{s:1:"a";s:1:"b";}?> php反序列化的时按理说找不到A这个类&#xff0c;但是他没有报错&#xff0c;…

SpringBoot复习

第一章 SpringBoot开发入门 1.Springboot的优点。 ① 可快速构建独立的Spring应用。 ② 直接嵌入Tomcat、Jetty和Undertow服务器&#xff08;无须部署WAR文件&#xff09; ③ 通过依赖启动器简化构建配置 ④ 自动化配置Spring和第三方库 ⑤ 提供生产就绪功能 ⑥ 极少的代码生成…

使用Docker Compose运行Elasticsearch

使用Docker Compose运行Elasticsearch可以帮助你快速搭建和管理Elasticsearch服务。以下是具体步骤&#xff1a; 1. 安装Docker和Docker Compose 确保你已经安装了Docker和Docker Compose。如果没有安装&#xff0c;可以参考官方文档进行安装&#xff1a; Docker安装指南Doc…

永久更改R包的安装目录

要永久更改 R 包的安装目录&#xff0c;可以通过设置 R 配置文件来实现。以下是步骤说明&#xff1a; 1. 查找和修改 R 配置文件 R 有几个配置文件用于保存用户和系统的设置&#xff1a; 用户级配置文件&#xff1a;通常位于 ~/.Rprofile系统级配置文件&#xff1a;通常位于…

HJY-91A/8J电压继电器10-242VAC 辅助电源220VDC 约瑟JOSEF

系列型号 HJY-E1A/4D数字式交流电压继电器&#xff1b;HJY-E1A/4J数字式交流电压继电器&#xff1b; HJY-E1B/4D数字式交流电压继电器&#xff1b;HJY-E1B/4J数字式交流电压继电器&#xff1b; HJY-E2A/4D数字式交流电压继电器&#xff1b;HJY-E2A/4J数字式交流电压继电器&…

【Android面试八股文】你刚刚提到了V2签名使用美团的Walle实现多渠道打包,那么你能讲一讲Android 签名的 v1、v2、v3、v4版本的区别吗?

文章目录 前言一、简介二、APK 签名方案 v1 (JAR签名)2.1. 签名过程2.2 验证过程2.3 详细例子2.4 优缺点2.5 美团基于V1版本的多渠道打包方案三、APK 签名方案 v23.1 为什么要设计APK 签名方案 v2 ?3.2 APK 签名方案 v2 : 签名前和签名后的 APK3.2.1 签名前和签名后的 APK3.2…

[17] 使用Opencv_CUDA 进行滤波操作

使用Opencv_CUDA 进行滤波操作 邻域处理操作 > 滤波操作&#xff0c;拒绝或者允许某特定频段通过如果图像某处的灰度级变化缓慢&#xff0c;那么就是低频区域&#xff0c;如果灰度级变化剧烈&#xff0c;就是高频区域邻域滤波即卷积操作形态学处理&#xff1a;膨胀&#xf…

Harmony学习(一)

1.arkts基础 //变量的存储和修改&#xff08;string number boolea&#xff09; let title:string 字符串类型 let num:number 21.4 let isLogin:boolean false title 字符串hhhhh console.log(title,isLogin,num) //常量 const PI: number 3.1435 console.log(pi,PI)…

全网最全postman接口测试教程和项目实战~从入门到精通

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

Spring Boot -- 图书管理系统(登录、展示+翻页、添加/修改图书)

文章目录 一、应用分层二、数据库的设计三、登录功能四、展示列表&#xff08;使用虚构的数据&#xff09;五、翻页 展示功能六、添加图书七、修改图书 一、应用分层 为什么我们需要应用分层&#xff1a;当代码量很多时&#xff0c;将其全部放在一起查找起来就会很麻烦&#…

Docker 可用镜像源

当使用 docker 发现拉取不到镜像时&#xff0c;可以编辑 /etc/docker/daemon.json 文件&#xff0c;添加如下内容&#xff1a; 这文章不涉及政治&#xff0c;不涉及敏感信息&#xff0c;三番五次的审核不通过&#xff0c;一删再删&#xff0c;只好换图片了。 重新加载服务配置…

Zookeeper基础教程

Zookeeper基础教程 资料来源&#xff1a;Zookeeper Tutorial (tutorialspoint.com) zookeeper就是Hadoop生态动物园的管理员 1. Zookeeper-概述 ZooKeeper是一种分布式协调服务&#xff0c;用于管理大型主机集群(large set of hosts)。在分布式环境中协调和管理服务是一个复…

防爆称重显示器怎么选?一篇文章教你轻松搞定!

现在电子秤的使用是比较频繁的&#xff0c;不管是工业生产、实验室还是日常生活环境&#xff0c;基本上都会用到。而电子秤所配的防爆称重显示器因为具有安全性和精确性&#xff0c;而受到大家的青睐。只是现在市面上的防爆称重显示器种类众多&#xff0c;想要选一款既符合安全…

解决navicat连接oracle19c数据库缺少oci.dll

下载oci.dll文件 搜索Oracle Instant Client Downloads Oracle Instant Client Downloads点击 Oracle Instant Client Downloads 超链接 根据自己的操作系统按需选择 以windows64位为例&#xff0c;下载 Version 19.23.0.0.0的OCI压缩包 解压到Navicat的安装根路径下&#xff…

Qt creator day1 练习

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面&#xff0c;要求&#xff1a;第行代码都有注释 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("贪玩蓝月——是兄弟就来砍我 登入&#…

两个src案例分享

案例一 文前废话:某天正在刷着**社区的帖子,欣赏着漂亮的小姐姐,突然间评论区的一条评论引起了我的注意,类似于下面这样 这种评论在html标签中代码格式是<a>这是文字</a>这样的 同时评论区XSS漏洞的高发区,想着可能会有操作点 一、发布一个标题有js语句的贴子 二…

压测工具Jmeter使用-1

一、安装部署 依赖&#xff1a;Java windows安装 1.配置环境变量&#xff1a;新建JMETER_HOME系统环境变量&#xff0c;值设置为Jmeter的安装路径&#xff0c; D:\Program Files (x86)\Jemter\apache-jmeter 2.运行Jemeter&#xff1a;安装路径下&#xff0c;双击bin目录下的j…

深度解析:品牌推广的内容、方式与形式,你了解多少?

品牌推广是每个企业都需要重视的关键环节。有效的品牌推广不仅能提升品牌知名度&#xff0c;还能塑造品牌形象&#xff0c;进一步吸引并留住客户。 作为一名手工酸奶品牌的创始人&#xff0c;目前全国也复制了100多家门店&#xff0c;我来分享下品牌的推广内容、方式和形式&am…

接口联调测试工作总结

接口联调测试工作已经告一段落&#xff0c;现在总结如下: 1、首先接口联调测试的价值 2、接口联调要有工作思路 3、接口联调工作准备 4、接口联调测试数据设计 5、接口联调脚本研发 6、脚本联调测试 测试业务本身需要接口联调调用 独立接口正确&#xff0c;但有可能接口…