编程题—leetcode198、213打家劫舍i ii

力扣刷题 动态规划:打家劫舍全系列 力扣刷题 动态规划:打家劫舍全系列 这个系列有好几道,一个一个来! 文章目录力扣刷题 动态规划:打家劫舍全系列198. 打家劫舍213. 打家劫舍 II337. 打家劫舍 III解法一:暴力递归解法二:暴力递归+记忆化优化解法三:消除后效性 198. 打家劫舍 难度:简单 题目描述 解题思路 这是这个系列里最简单的一道啦,状态转移方程很明显。对于第i个房子,要么偷要么不偷,如果偷那金额就等于前两天的金额+当前房子的金额;如果不偷那就等于前一天的金额。每天从这两种选择中选出金额最大的,写成状态转移方程就 阅读详情

题目链接
打家劫舍
题目描述

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:

输入: [2,7,9,3,1]
输出: 12
解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
     偷窃到的最高金额 = 2 + 9 + 1 = 12 。
解题思路

1、动态规划
2、当前的最大值等于MAX(前一个最大值,前一个的前一个的最大值加上当前的值)即max[i]=Math.max(max[i-1],max[i-2]+nums[i]);

通过代码
class Solution {
    public int rob(int[] nums) {
        int len=nums.length;
        if (len==0) return 0;
        int[] max=new int[len];
        if (len==1) return nums[0];
        max[0]=nums[0];
        if (len==2) return Math.max(max[0],nums[1]);
        max[1]=Math.max(max[0],nums[1]);
        for(int i=2;i<len;i++){
            max[i]=Math.max(max[i-1],max[i-2]+nums[i]);
        }
        return Math.max(max[len-1],max[len-2]);
    }
}
打家劫舍 II
题目描述
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

输入: [2,3,2]
输出: 3
解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
示例 2:

输入: [1,2,3,1]
输出: 4
解释: 你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/house-robber-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路

1、相比第一道题,这道题的难点在于增加了环
2、有两种情况,a,第一间就抢,则最后一间肯定不抢
3、b,第一间不抢,则第二间必抢,至于最后一间抢不抢都行
4、分别计算两种情况的最大值,进行比较即可

上面是本人的解题思路,有很强的大佬的解题思路参考链接如下

https://leetcode-cn.com/problems/house-robber-ii/solution/213-da-jia-jie-she-iidong-tai-gui-hua-jie-gou-hua-/

通过代码
class Solution {
    public int rob(int[] nums) {
        if (nums.length==0) return 0;
        else if (nums.length==1) return nums[0];
        else if (nums.length==2) return Math.max(nums[0],nums[1]);
        int[] num1= new int[nums.length-1];
        for(int i=0;i<num1.length;i++){
            num1[i]=nums[i];
        }
        int[] max1=new int[num1.length];
        max1[0]=num1[0];
        max1[1]=num1[0];

        //第一个不遍历
        int[] max2=new int[nums.length];
        max2[0]=0;
        max2[1]=num1[1];
        return Math.max(maxNum(num1,max1),maxNum(nums,max2));
    }
    public int maxNum(int[] nums,int[] max){
        int len=nums.length;
        for(int i=2;i<len;i++){
            max[i]=Math.max(max[i-1],max[i-2]+nums[i]);
        }
        return Math.max(max[len-1],max[len-2]);
    }
}
动态规划之打家劫舍系列问题 文章目录一、打家劫舍系列问题二、leetcode例题讲解打家劫舍系列问题198. 打家劫舍213. 打家劫舍 II337. 打家劫舍 III 一、打家劫舍系列问题 打家劫舍系列问题主要包含三种DP问题: 常规DP 环形DP 树形DP 二、leetcode例题讲解打家劫舍系列问题 198. 打家劫舍 leetcode题目链接:198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷 阅读详情

相关推荐

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3338

leetcode刷题(第198题,213题,337题)——打家劫舍(I,II,III)

一、198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷 窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在 同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 输入:

weixin_47450807的博客 1353

STM32F407硬件SPI驱动ADS1220避坑指南:从寄存器读不到数据到采样值异常的完整解决流程

本文详细解析了STM32F407硬件SPI驱动ADS1220的常见问题与解决方案,包括SPI配置、寄存器读取异常、采样值优化等关键环节。通过CubeMX配置技巧和Keil调试经验,帮助开发者快速排查从通信失败到数据异常的各种问题,实现高精度数据采集系统的稳定运行。

weixin_26878995的博客 157

leetcode:198. 打家劫舍

题目来源 leetcode 题目描述 题目解析 为什么这道题不能用贪心算法解决。 因为这道题有后滞性。比如如果我们决定抢到了{1,2,3},这时候得到了价值是6。如果这时候我们去掉1,现在的价值就会缩水。因此不能贪心,只能聪明的穷举 分析 (1)确定状态 最后一步: 现在我们站在最后一家num[k](k==num.size()−1)num[k](k == num.size() - 1)num[k](k==num.size()−1)之前,这时候会有两种情况 可以抢,也就是num[k−1

OceanStar的博客 1165

使用嘉立创绘制STM32F103T8C6最小系统板

使用嘉立创EDA绘制一个属于自己的STM32最小系统板

weixin_67887035的博客 1万+

【博客汇总】UV打印机博客汇总

UV平板机博客汇总

Print World的专栏 1739

C++实现LeetCode(198.打家劫舍)

LeetCode 第 198 题「打家劫舍」(House Robber)描述的是:一排房子,每间有一定金额,小偷不能连续偷相邻的两间,求能偷到的最大金额。题目把「相邻约束下的最优化选择」抽象得非常干净,是学习线性动态规划的标准例题。常见的误解有三个。第一,用贪心:每次挑当前金额更大的房子。相邻约束会让局部最优失效,隔一间跳着偷往往更划算。第二,认为状态要记录「上一间偷没偷」两个维度,写成二维dp。其实只要定义「前 i 间能偷到的最大值」,转移自然涵盖两种情况。第三,把边界条件写成。

kimnoic的专栏 89

如何把Excel的数据导入python?

Python数据分析——excl导入数据的简单方法(xlrd) 本文的初衷是发现网上很多Excel导入Python都没有结合具体Excel文档进行讲解,所以这篇文档将会呈现一个简单快速的Excel+Python的入门方法。 开发环境 Prerequisites: 在开始用Python导入Excel之前,要配置好自己的开发环境,最好有IDE(terminal也可)+安装相应的数据分析包。 IDE :pycharm,vscode,etc 数据分析包:matplotlib,xlrd,numpy,etc 导入数

qq_40783513的博客 7万+

leetcode 第198题 打家劫舍(动态规划)

题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例 2: 输入:[2,

weixin_46708094的博客 1137

使用LogisticRegression和LightGBM模型对信贷违约进行预测----基于kaggle比赛数据

3.分离数值型变量与类别型变量,发现有些数值型变量因为输入不规范,比如数值中含有字符(28_,_10000_等)被划分为类别型变量 ,比如 'Age','Annual_Income','Num_of_Loan', 'Num_of_Delayed_Payment', 'Changed_Credit_Limit','Credit_Mix','Monthly_Balance', 'Outstanding_Debt' ,'Amount_invested_monthly'等。三、分箱,woe编码,计算IV值。

I_am_a_big_tiger的博客 1682

搭建 Newman + Postman + Git + Jenkins 环境教程

一步步搭建 Newman、Postman、Git 和 Jenkins 的环境。这些工具常用来做 API 测试和 CI/CD 自动化,尤其是 Postman 和 Newman 搭配 Git 和 Jenkins,能实现 API 集合的版本管理和自动测试。

Criss@陈磊 435

leetcode算法练习: 打家劫舍

题目: 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [1,2,3,1] 输出: 4 解释: 偷窃 1 号房屋 (金额 =...

silence_bug的博客 156

OpenClaw实战系列03:Slack/Telegram国际版接入实战指南

在当今的软件开发和工作流自动化中,将项目管理工具与即时通讯平台集成已成为提高团队协作效率的关键。OpenClaw作为一个开源的自动化工具,通过接入Slack和Telegram国际版,可以实现实时通知、自动化任务触发和团队协作的无缝对接。本文将详细介绍如何实现OpenClaw与这两个主流即时通讯平台的集成。OpenClaw是一个开源的自动化工作流引擎,支持多种触发器和执行器,能够帮助开发团队实现CI/CD流程、任务调度、监控告警等自动化场景。模块化设计:支持插件化扩展多触发器支持。

PeterPan的博客 586

代码随想录算法训练营第47天| Leetcode 198.打家劫舍、Leetcode 213.打家劫舍II、Leetcode 337.打家劫舍 III

最后一道题还是有难度的,不仅需要理解动态规划,还要掌握二叉树的遍历。最后,如果文章有错误,请在评论区或私信指出,让我们共同进步!

Camellia__Wang的博客 1046

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

代码随想录算法训练营第三十九天|leetcode198.打家劫舍、leetcode213.打家劫舍II、leetcode337.打家劫舍 III

思路:根据题目,我想的就是算两个隔着相加的结果,比较取大的,但是呢,感觉好像题意我理解的不是很对,反正错了。

angela3264的博客 1023

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

打家劫舍问题--LeetCode198、213

打家劫舍问题–LeetCode198、213 题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [1,2,3,1] 输出: 4 解释: 偷窃...

何时立秋的博客--向前有路,未来可期 222

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

代码随想录算法训练营第四十七天|LeetCode198.打家劫舍、LeetCode213.打家劫舍II、LeetCode337.打家劫舍III

1.如果nums为空,或者nums的长度为0,return0。1.如果nums为空,或者nums的长度为0,return0。2.如果nums.size==1,返回nums[0]dp[i]:考虑下标i能偷的最大的金币数dp[i]dp[i]:考虑下标i能偷的最大的金币数dp[i]dp[i]:考虑下标i能偷的最大的金币数dp[i]2.如果nums的长度为1,返回nums[0]2.如果nums的长度为1,返回nums[0]最终返回的是dp[nums.size-1]最终返回的是dp[nums.size-1]

m0_64514622的博客 964

刷题DAY48 | LeetCode 198-打家劫舍 213-打家劫舍II 337-打家劫舍III

同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

wangs29的博客 1437

24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

day39:动态规划VII

weixin_54468359的博客 1119

Leetcode_打家劫舍三道题(动态规划总结)

Leetcode_打家劫舍三道题(动态规划总结) 分类专栏:Leetcode# 动态规划文章标签:动态规划leetcode算法 LeetCode198打家劫舍 leetCode213打家劫舍2 LeetCode337打家劫舍3 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算...

asd23rsa的博客 221

Leetcode刷题 | Day39_动态规划07_打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。提示: 2.213打家劫舍II213. 打家劫舍 II - 力扣(LeetCode

weixin_52152177的博客 1116

【dp】LeetCode打家劫舍系列

题目描述 这题一看就知道得用动态规划做,本来在学校是学过的,但缺少实践,理论知识也忘得差不多了,看到这题还是不知道该怎么用dp解,只能翻看题解,理解后独立写出代码 dp方程如下: dp[i] = max(dp[i-2] + nums[i] , dp[i-1]) dp[i]表示偷了 i 家时,获得的最大收益 nums[i]表示当前准备偷的房屋有多少钱 理解下来就是:偷了 i 家后,我所获得的最大...

长期更新自学笔记 423

代码随想录算法训练营第四十七天 | LeetCode 198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III

【代码】代码随想录算法训练营第四十七天 | LeetCode 198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III。

Hsusan的博客 250

代码随想录算法训练营第47天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍 III

代码随想录算法训练营第47天 动态规划Part09

Aaron_Yang 926

代码随想录day50|198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

198.打家劫舍 (中等198.打家劫舍 (中等。

m0_63071531的博客 303

Day48| Leetcode 198. 打家劫舍 Leetcode 213. 打家劫舍 II Leetcode 337. 打家劫舍 III

仔细发现情况23包括情况1,所以只考虑情况23就可以了。打家劫舍系列,比较好理解。end,陆续考试挺多的。

weixin_72635630的博客 315
上一篇: 编程题—不同路径
下一篇: 编程题—leetcode300:最长上升子序列
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值