LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)

news2025/4/26 1:05:04

打家劫舍

    • 平板板打家劫舍
    • 转圈圈打家劫舍(进阶版)

平板板打家劫舍

转化子问题:
按顺序偷n间房子,就是考虑偷前n-1间房子还是偷前n-2间房子再偷第n间房子。在这里插入图片描述

列出公式:
res[n] = max{ res[n-1] , 数组中最后一个数据+res[n-2] } (res是前k个房子中偷盗最多的钱的数组)
所以对于第n个数组数据依赖于前n-1和n-2的数据。可以得出dp数组从左到右计算。
同时对于动态规划问题,写dp数组时,要主动的定义好开头。

res[0] = 0
res[1] = nums[0]

同时注意可以增加边界条件,减少花费时间。当只有一家时偷这家结束,或者当只有两家时偷钱最多的一家结束。

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

转圈圈打家劫舍(进阶版)

现在这个小区里面是环形的,就是将首尾变成相邻问题。
那就是偷到最后一家时还要考虑是否前面偷了第一家。但是对于动态规划的dp数组,无法记录是否偷了第一家。
那就考虑将问题分解成两个子问题。
对于第一家和最后一家,将选择一家偷。就分解成偷前n-1家或者第2到第n家的平板板打家劫舍中选最高的结果偷。
列出公式
max{ 忽略第n家,res[n-1] ,忽略第1家,ans从第2家开始偷到第n家}
(res[n-1] = nums[:n-1] ans[n] = nums[1:])
降低空间占用,可以考虑用同一个dp数组,计算完将res[length-1]保存下来,更新res数组。

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

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

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

相关文章

企业信息化之源代码防泄密场景分析

场景描述 随着企业信息化发展迅速&#xff0c;越来越多的无形资产面临着被泄露&#xff0c;被盗取的&#xff0c;或员工无意导致的数据泄密风险。尤其是有源码开发的企业&#xff0c;源代码的安全更是重中之重&#xff0c;一旦泄密&#xff0c;有可能给企业带来不可估量的损失…

全程数字化的企业电子招标采购管理系统源码

全程数字化的采购管理 智能化平台化电子化内外协同 明理满足采购业务全程数字化&#xff0c; 实现供应商管理、采购需求、全网寻源、全网比价、电子招 投标、合同订单执行的全过程管理。 传统采购模式面临的挑战 如何以最合适的价格,找到最优的供应商,购买到最好的产品和服务?…

程序员必备网站,建议收藏!

俗话说的好&#xff0c;一个程序员&#xff0c;20%靠知识储备&#xff0c;80%靠网络搜索。 打开代码&#xff0c;打开Google&#xff0c;开始工作。 那么常用的写码软件&#xff0c;你知道几个呢&#xff1f; 下面我们来一起看一下常用的写码软件吧~ 建议收藏本文&#xff…

【算法】面试题 - 链表

链表相关面试题141. 环形链表问题&#xff1a;快慢指针为什么一定会相遇142. 环形链表 II问题&#xff1a;如何确认入口160. 相交链表237. 删除链表中的节点19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并K个升序链表&#xff08;两种解法&#xff09;扩展&#x…

国产手机扬眉吐气,终于打击了苹果的嚣张气焰

苹果在9月份、10月份都取得了快速增长&#xff0c;而国产手机品牌持续下滑&#xff0c;但是11月份终于让国产手机捡回了主动权&#xff0c;11月份的数据显示有国产手机品牌的出货量大幅增长&#xff0c;而苹果的出货量却大幅下滑&#xff0c;国产手机成功反击了苹果。分析机构给…

Vue + SpreadJS 实现高性能数据展示与分析

Vue SpreadJS 实现高性能数据展示与分析 在前端开发领域&#xff0c;表格一直都是一个高频使用的组件&#xff0c;尤其是在中后台和数据分析场景下。但当一屏展示数据超过1000条数据记录时&#xff0c;会出现浏览器卡顿等问题&#xff0c;严重影响客户体验。为解决这些性能问…

Seay代码审计系统审计实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Seay代码审计系统审计实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

【算法题解】5. 删除有序数组中的重复项 + 移动零

文章目录删除有序数组中的重复项题目解题思路代码实现复杂度分析移动零题目解题思路代码实现复杂度分析删除有序数组中的重复项 题目 给你一个 升序排列 的数组 nums &#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次 &#xff0c;返回删除后数组的新…

Python 并发编程实战,用多线程、多进程、多协程加速程序运行

Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行 文章目录Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行1、什么是CPU密集型计算、IO密集型计算&#xff1f;2、多线程、多进程、多协程的对比3、怎么根据任务选择对应技术&#x…

达梦数据成功过会!信创浪潮中如何成就一家国产龙头?

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年12月22日&#xff0c;上海证券交易所科创板上市委员会发布《2022年第110次审议会议结果公告》&#xff0c;武汉达梦数据股份有限公司&#xff08;首发&#xff09;符合发行条件、上市条件和信息披露要求。该公告标志着…

5.4 迭代语句

文章目录while语句使用while循环传统for语句传统for循环的执行过程for语句头中的多重定义省略for语句头的某些部分范围for语句do while语句迭代语句通常称为循环,它重复执行操作直到满足某个条件才停下来。while和for语句在执行循环体之前检查条件&#xff0c;do while 语句先执…

MATLAB算法实战应用案例精讲-【连接分析】PageRank(补充篇)(附Python代码实现)

前言 PageRank算法在1998年4月举行的第七届国际万维网大会上由Sergey Brin和Larry Page提出。PageRank是通过计算页面链接的数量和质量来确定网站重要性的粗略估计。算法创立之初的目的是应用在Google的搜索引擎中,对网站进行排名。 随着国内外学者的深入研究,PageRank算法…

burpsuite靶场——SSRF

文章目录针对本地服务器的基本 SSRF针对另一个后端系统的基本 SSRFSSRF 与基于黑名单的输入过滤器基于白名单的输入过滤器的 SSRFSSRF 通过开放重定向漏洞绕过过滤器带外检测的盲 SSRF利用 Shellshock 的盲 SSRF针对本地服务器的基本 SSRF 在商品下查看货物库存情况时抓包 有st…

操作系统实验2:fork()系统调用

操作系统实验2:fork()系统调用 文章目录操作系统实验2:fork()系统调用Task1: fork的基本使用代码运行结果解释Task2: 深入理解fork创建的子进程与父进程的关系代码实验结果现象解释遇到的问题1.乌龙事件 vscode2.the troubles encountered in task1如何跑.sh文件编译链接遇到的…

SegeX Progress:MFC通用进度条

----哆啦刘小洋 原创&#xff0c;转载需说明出处 MFC高级通用进度条-目录1 简介2 进度条实现基本原理3 使用方法3 .1 简单情况3.2 两个前后独立的进度条3.3 实际应用的一般情况3.4 带子进度条4 其他4.1 使用限制4.2 其他全局宏&#xff08;函数&#xff09;4.3 当前进度条设置1…

技术开发107

技术开发107 业务内容&#xff1a; 汽车音响等汽车电子部件试制、电子设备部件试制、精密钣金试制精密钣金试制 公司简介&#xff1a; 代表&#xff1a;中山尚美 成立时间&#xff1a;1950年6月 资本金&#xff1a;1000万日元 员工数&#xff1a;15名 资格认证&#xff…

数智为线,经纬中国:新华三勾勒出的山河锦绣

刺绣&#xff0c;是中华民族源远流长的技艺美术。早在《尚书》中&#xff0c;就记载了章服制度“衣画而裳绣”。而刺绣之美之所以能够传承千年&#xff0c;形成中国审美的一张名片&#xff0c;就是因为传统的染色技艺不够精细&#xff0c;颜色常常浮在布匹表面&#xff0c;但刺…

【卫朋】营销技能:营销4P之外,还有这些经典理论

一提到市场营销&#xff0c;很多人都可能会联想到经典的营销4P理论&#xff0c;但你可能不知道的是&#xff0c;4P理论只是“4字营销理论家族”中的一员。 市场营销“4字家族”中的4P、4R、4C理论构成了市场营销的基础部分。 它们诞生于特殊的环境和年代&#xff0c;为当时的企…

Redis原理篇—内存回收

Redis原理篇—内存回收 笔记整理自 b站_黑马程序员Redis入门到实战教程 内存过期策略-过期key处理 Redis 之所以性能强&#xff0c;最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能。 我们可以通过修改配置文件…

再学C语言16:表达式和语句

语句组成了C的基本程序的步骤&#xff0c;大多数语句由表达式构造而成 一、表达式 表达式&#xff08;expression&#xff09;由运算符和操作数组合构成 操作数是运算符操作的对象&#xff0c;可以是常量、变量或二者的组合 C的一个重要属性&#xff1a;每一个C表达式都有一…