【LeetCode75】第六十一题 打家劫舍

news2024/11/20 10:32:21

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

这是力扣里一道关于动态规划的很经典的一道题。

那么首先呢我们扮演一个小偷,有一堆的房屋让我们偷,但是我们不能偷相邻的房屋,问我们最终能偷多少。

那这道题我们能不能拆分成小问题呢。

答案当然是可以,如果我只有一间屋子能偷,那我能偷的最多的金额是不是就是这间屋子。
如果有两件屋子可以偷,不过由于限制不能偷相邻的屋子,所以我能偷的最多的金额是两间屋子的最大值。

如果有三间屋子,那么可以开始操作了,那我就可以选择偷或者是不偷第三间屋子了,如果偷,那么我就不能偷第二间屋子,我能偷的金额就是只有一间屋子的时候能偷的金额再加上第三间屋子的金额。

如果不偷,那么我能获取的最多的金额就是只有两间屋子的时候能获取的最多的金额。
发现规律了吗,我在n间屋子的情况下能获取的最多的金额,只和在n–1间屋子的情况下以及在n–2间屋子的情况下有关。

那么我们就找到了刚刚说的递推公式。
那递推公式就是这个


这个nums自然就是表示房屋价值的数组了。

而这个dp数组是什么意思,dp的第i–1个数表示的就是如果只有i间房子,我们能获取的最多的金额。dp数组就是存放我们这些小问题的状态的,由较前面的元素可以推断出后面元素的结果,这就是动态规划。

至于为什么叫dp数组呢,我也不知道,大家都管动态规划的状态数组叫dp,我也就跟着叫了。
我们要明确的点是dp里的元素是什么意思,下标为i–1的元素就是表示只有i间房子的情况下我们能获取的最多的数。

那dp数组的最后一个元素就是我们要返回出去的元素了。只不过我们现在还要一步步根据递推公式推导。

我们看这个递推公式,含义就是有i间房屋的情况下,我能获取的最多金额等于 在有i–1间房屋的情况下能获取到的最大金额 和 在有i–2间房屋的情况下能获取到的最大金额再加上第i间房屋的金额 的最大值。

 那么我们初始化前两间屋子之后,我们就可以用递推公式把整个dp数组填满了,最终返回dp的最后一个元素即可。

代码:

class Solution {
public:
    int rob(vector<int>& nums) {
        if(nums.size()<2) return nums[0];   //如果数组长度就是等于1,那么直接返回这个元素即可
        
        vector<int>dp(nums.size(),nums[0]);
        dp[1]=max(nums[0],nums[1]);
        for(int i=2;i<nums.size();i++){
            dp[i]=max(dp[i-1],dp[i-2]+nums[i]); //偷本间屋子就不能偷上一间屋子,不偷本间屋子,那么获取的现金就跟上间屋子一样.
        }
        return *(dp.end()-1);
    }
};

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

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

相关文章

计算机竞赛 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习OCR中文识别系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;…

分享一个清理工具栏和插件的小工具

现在只要是经常用SolidWorks的&#xff0c;肯定是多多少少知道一些插件&#xff0c;有时候安装了很多个插件的时候&#xff0c;工具栏可能会乱串&#xff0c;而且还有可能出现插件删除了&#xff0c;但插件里面还能看到。 这其中的原因很简单&#xff0c;基本上都是反注册或者…

ArryList线程安全问题以及解决方案

arrayList是一个线程不安全的集合,在多线程情况下可能会引起数据不一致、数组越界等问题。下面具体列一下多线程情况下ArrayList会出现什么错误. 1.java.util.ConcurrentModificationException ConcurrentModificationException 中文意思就是并发修改异常&#xff0c;存在于并…

【从入门到起飞】JavaSE—方法引用

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The truth that you leave】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f354;概述&#x1f354;注意&#x1f388;如何确定是否是…

电脑msvcr100.dll丢失的解决方法,找不到msvcr100.dll的修复方法分享

msvcr100.dll 丢失是一种常见的软件运行错误&#xff0c;通常会在运行某些程序时出现。这个问题可能是由于多种原因导致的&#xff0c;例如病毒感染、软件损坏、卸载应用程序时误删除文件等。为了解决这个问题&#xff0c;我们需要采取一些措施来恢复 msvcr100.dll 文件。 一、…

heic图片如何转为jpg格式

heic图片如何转为jpg格式&#xff1f;现阶段&#xff0c;在技术水平不断完善的基础上&#xff0c;图片质量越来越好了&#xff0c;且图片数量也越来越多。图片内容不断丰富&#xff0c;导致图片格式愈发多样化。为了能够保证图片的有效应用&#xff0c;我们有的时候需要将图片格…

一台PoE交换机可以为多少个设备提供供电?

如今在安防监控领域&#xff0c;许多网络设备都支持PoE供电。在网络监控工程中&#xff0c;为了节省布线成本并提高便捷性&#xff0c;大多数工程商选择使用PoE供电方案&#xff0c;也就是使用PoE交换机为监控摄像头提供电力。那么&#xff0c;一台功率输出以太网&#xff08;P…

可以创业,也可以副业的网上长期挣钱的项目

在这个飞速发展的互联网时代&#xff0c;越来越多的人开始尝试在网上创业或者寻找一份可持续的副业来增加收入。不过在网上赚钱的难度是比较大的&#xff0c;不是轻易就能做到的&#xff0c;所以不付出一番努力&#xff0c;没有悟性和执行力&#xff0c;那么是很难做好的&#…

MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储

Windows系统实现多磁盘存储 1.为什么2.多磁盘存储2.1 数据库配置2.2 文件夹磁盘映射2.3 创建新的数据集 3.总结 1.为什么 这里仅针对只有一台Windows系统服务器的情景&#xff1a; 当服务器存储不足时&#xff0c;或者要接入更多的数据&#xff0c;就会挂载新磁盘&#xff0c…

Vim编辑器使用入门

目录 一、Vim 编辑器基础操作 二、Vim 编辑器进阶操作 三、Vim 编辑器高级操作 四、Vim 编辑器文件操作 五、Vim 编辑器文件管理 六、Vim 编辑器进阶技巧 七、Vim 编辑器增强功能 Vim的三种工作模式 一、Vim 编辑器基础操作 1.移动光标 - 光标的移动控制 移动光标有两…

JS手动实现发布者-订阅者模式

发布-订阅模式是一种对象间一对多的依赖关系&#xff0c;当一个对象的状态发送改变时&#xff0c;所有依赖于它的对象都将得到状态改变的通知。具体过程是&#xff1a;订阅者把自己想订阅的事件注册到调度中心&#xff0c;当发布者更新该事件时通知调度中心&#xff0c;由调度中…

python每日一题(模拟用户登录验证)

1、题目 预先设定正确用户名与密码&#xff0c;用来验证用户是否登录成功。 第一次&#xff1a; ① 输入用户名与密码&#xff0c;如果用户名与密码正确&#xff0c;则提示登录成功&#xff1b; ② 如果用户名错误&#xff08;不管密码是否正确&#xff09;&#xff0c;则需要重…

【NetEQ】读 《白话解读 WebRTC 音频 NetEQ 及优化实践》学习笔记

白话解读 WebRTC 音频 NetEQ 及优化实践webrtc 的重要模块 官方文档 :转载请标明出处:大神翻译 大神地址 : https://blog.csdn.net/lhl_blog/article/details/10993605GIPS NetEQ概述 GIPS NetEQ是一项专为IP电信系统开发的高级语音质量处理技术,其能够在大幅提高语音质量的…

ros 接收相机数据数据并发布

完整这个任务不需要用到python3 效果如下所示 环境 ROS1 python2.7 原始环境 无conda 或者conda deactivate 无conda 状态 pip install rospkg pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python4.2.0.3 代码 放在工程目录中 #!/usr/bin/env …

stm32学习笔记:OLED显示屏

一、OLED简介 OLED:有机发光二极管&#xff0c;供电∶3~5.5V&#xff0c;通信协议︰I2C/SPI&#xff0c;分辨率∶12864 二、常用的调试方式 串口调试∶通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试∶直接将显示屏连接…

龙讯旷腾机器学习力场PWMLFF V0.1.0——优化件lammps接口,提供主动学习方案

PWMLFF&#xff08;机器学习力场&#xff09;手册 http://doc.lonxun.com/PWMLFF/ 我们都知道从第一性原理出发的分子动力学&#xff08;Ab Initio Molecular Dynamics, AIMD&#xff09;计算非常精确&#xff0c;但需要消耗大量时间和计算资源&#xff0c;能模拟的空间尺度和…

代码随想录算法训练营第59天 | ● 503.下一个更大元素II ● 42. 接雨水

文章目录 前言一、503.下一个更大元素II二、42. 接雨水总结 前言 单调栈&#xff1b; 一、503.下一个更大元素II 循环的问题&#xff1a;1.多建立一个数组 2.采用取模的方法&#xff1b; 问题&#xff1a;采用取模&#xff0c;后面的值会被前面的覆盖掉吗&#xff1f; 答&am…

宁波融资融券开户利息率最低是多少?两融利率5%或以下!

宁波融资融券开户利息率最低是多少?两融利率5%或以下&#xff01; 融资融券是指投资者通过借入资金融资&#xff0c;或者借入证券卖出并借入资金购买证券&#xff0c;以达到增加投资收益的一种交易方式。融资融券交易需要满足一定的条件&#xff0c;如投资者必须拥有一定的股…

Go 围炉札记

文章目录 一、Go 安装 一、Go 安装 VScode下配置Go语言开发环境【2023最新】 基础篇&#xff1a;新手使用vs code新建go项目 vscode里安装Go插件和配置Go环境 Documentation Golang 配置代理 Go命令详解 一文详解Go语言常用命令 Go 语言教程 熬夜整理&#xff0c;最全的Go语…

阿里云效自动构建python自动测试脚本

之前一直用的是jenkins自动构建自动化脚本&#xff0c;因为现在的公司统一在阿里云效的流水线上做代码的管理&#xff0c;构建&#xff0c;要求自动化测试也在上面自动构建&#xff0c;故而学习了一下。为自己做一个记录&#xff0c;也给有需要的朋友做一个参考。 1. 新建流水…