213-打家劫舍II(fib)

从‘爬楼梯’到‘打家劫舍’:一维DP的保姆级刷题路线图(附LeetCode题号) 本文提供了一维动态规划(DP)的系统学习路线,从基础题目如LeetCode 70.爬楼梯到进阶问题如198.打家劫舍,详细解析状态转移方程和记忆化搜索技巧。通过实战案例和刷题路线图,帮助开发者掌握DP核心思想,提升算法解题能力。 阅读详情

题目

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

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

示例 1:

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

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

输入:nums = [0]
输出:0

题解

class Solution {
    public int rob(int[] nums) {
        int len=nums.length;
        if(len==0||nums==null){
            return 0;
        }
        if(len==1){
            return nums[0];
        }
        return Math.max(basicRob(Arrays.copyOfRange(nums,0,len-1)),basicRob(Arrays.copyOfRange(nums,1,len)));
    }
    private int basicRob(int[] nums){
        int[] dp=new int[nums.length+1];
        dp[0]=0;
        dp[1]=nums[0];
        for(int i=2;i<=nums.length;i++){
            dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i-1]);
        }
        return dp[nums.length];
    }
}

笔记:

  1. 找出循环房屋数组与普通数组的关系(方程):

    会发现最后一间房屋和第一间房屋只能取其一。

  2. Arrays.copyOfRange(数组名,firstindex,lastindex))

解法二(不使用copyOfRange)

public int rob(int[] nums) {
    if (nums == null || nums.length == 0) {
        return 0;
    }
    int n = nums.length;
    if (n == 1) {
        return nums[0];
    }
    return Math.max(rob(nums, 0, n - 2), rob(nums, 1, n - 1));
}

private int rob(int[] nums, int first, int last) {
    int pre2 = 0, pre1 = 0;
    for (int i = first; i <= last; i++) {
        int cur = Math.max(pre1, pre2 + nums[i]);//相当于比实际的结果还多一位,因为使用的nums[i],不是i-1
        pre2 = pre1;
        pre1 = cur;
    }
    return pre1;
}

笔记:

  1. 比较前一个结果和前两个结果加nums[i]的大小。
动态规划就此一篇 全网最详细, 逐步理解, 万字总结 文章目录动态规划 - 超详细系列首先,先大致列下这篇文章会讲到什么1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的?2.用不同难度的动态规划问题举例说明, 最后会使用《打家劫舍》系列三个题再重温一次.一、动态规划带给我们的优势传统递归 vs. DP1. 先 递归解决2. 后 动态规划解决3. 动态规划 + 优化二、动态规划四大解题步骤处理问题步骤一:定义dp数组的... 阅读详情

相关推荐

从零到一:Ubuntu22.04下VSCode与中文输入法的深度整合指南

本文详细介绍了在Ubuntu22.04系统中如何深度整合VSCode与中文输入法,包括环境准备、安装方案对比、输入法配置及常见问题解决方案。通过fcitx框架优化中文输入体验,提供从基础设置到高级调试的全方位指南,帮助开发者提升在Linux环境下的开发效率。

weixin_29158047的博客 483

leetcode专项 动态规划入门

刷一下leetcode的动态规划专项,本篇博客为入门专项。

qq_45654671的博客 486

不只是驱动:拆解AIC8800 WiFi模组在RK Android系统的完整启动链(从DTS到HAL)

本文深入解析了AIC8800 WiFi模组在RK Android系统中的完整启动链,从设备树(DTS)配置到HAL层适配,涵盖驱动移植、固件加载及用户空间服务协同等关键环节。通过详细的技术分析和调试技巧,帮助开发者解决RK平台与AIC8800模组的兼容性问题,优化WiFi子系统性能。

weixin_30439067的博客 492

2021-04-08 LeetCode动态规划--斐波那契数列

文章目录动态规划算法算法核心动态规划的两种形式动态规划的原理动态规划的经典模型题目70.爬楼梯题目大意解题思路代码实现198. 打家劫舍题目大意解题思路代码实现213. 打家劫舍 II题目大意解题思路代码实现 动态规划算法 算法核心 Those who cnnot remrember the past are condemned to repeat it. 动态规划算法的核心就是记住已经解决过的子问题的解。 动态规划的两种形式 自顶向下的备忘录法 以斐波那契数列为例子,备忘录方法的思想就是创建一个n+1大

m0_52675592的博客 324

MIT Cheetah Learning (一):State Estimate 从理论到实践:EKF融合IMU与编码器的状态估计全解析

本文深入解析了MIT Cheetah机器人中基于Extended Kalman Filter的状态估计技术,详细探讨了如何融合IMU与编码器数据以实现精准的State Estimate。通过四元数建模和传感器误差分析,揭示了EKF在复杂地形中的工程实践价值,为四足机器人的实时状态估计提供了完整解决方案。

weixin_30292843的博客 306

【STM32篇】DRV8425驱动步进电机

【STM32篇】在上篇文章中使用了HR4988实现了步进电机的驱动,在实际运用过程,4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。

we_long的博客 3070

2021-07-07 【算法】【动态规划】【自我练习】简单练习

文章目录简单热身打家劫舍 简单热身 LC509 class Solution: def fib(self, n: int) -> int: f =[0,1] for i in range(2,n+1): f.append(f[i-1]+f[i-2]) return f[n] LC1137 class Solution: def tribonacci(self, n: int) -> int:

qq_37137948的博客 145

三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

Robot_PLC_HMI_Automation 1万+

LeetCode——动态规划(Java)

记录一下自己刷题的历程以及代码。写题过程中参考了代码随想录的刷题路线。会附上一些个人的思路,如果有错误,可以在评论区提醒一下。原题链接和上一题 [中等] 416. 分割等和子集 相像,其实就是找出两堆重量尽量相近的石头。就是这一半石头堆能够取到的最大重量。就是另一个石头堆,且若两个石头堆重量无法相等,后者一定比前者大,所以最后的返回值就是二者之差i++)i++){//倒序遍历是保证每个数字只取一次i++){j--){

jhin_lx的博客 1432

把收款差异从扯皮变成闭环:SAP S/4HANA Dispute Resolution 模块到底解决什么问题?

本文摘要: SAP S/4HANA的争议解决模块(Dispute Resolution)通过标准化流程管理企业应收争议,解决发票与收款差异问题。核心是创建可追踪的Dispute Case工单,明确处理角色(Processor和Manager),并与财务系统联动实现自动清账。系统支持手工/自动创建争议工单,通过动态默认值减少错误,并最终实现争议金额归零的闭环管理。文中给出制造业客户扣款的完整处理案例,并强调组织落地需统一权限与目录。最后提供ABAP代码示例展示如何通过BAPI创建争议工单。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

17、神经网络训练算法与高阶模糊Cohen - Grossberg神经网络稳定性分析

本文介绍了一种新的数据驱动算法用于神经网络训练,该算法继承三次样条权重函数的优点,具有简单架构和良好泛化性能,并通过并行机制显著提升训练速度。同时,研究了高阶模糊Cohen-Grossberg神经网络(HOFCGNN)在可变及无界延迟下的稳定性,利用M矩阵理论和向量Lyapunov函数方法,证明了系统平衡点的存在性、唯一性和全局指数稳定性。研究成果为神经网络的高效训练与稳定应用提供了理论支持和技术路径。

b9c0d的博客 149

LeetCode动态规划训练营(1~5天)

第一天 LeetCode509.斐波拉契数 不说了,大一刚开学学会的第一个算法。这波直接回忆童年。 class Solution { public: int fib(int N) { if(N<=1) return N; vector<int> dp(N+1,0); dp[0] = 0; dp[1] = 1; for(int i=2;i<=N;i++){ ..

沉迷单车的追风少年 571

一条 POST 创建整棵业务对象树,SAP Gateway Deep Create 的运行机制与 ABAP 实现

SAPUI5 的 OData V2 Model 支持 Deep Create,可以为一个新建的 transient parent context 创建 Navigation Property 下的 subentity,并把这些子实体的数据合并进 Root Entity 对应的 OData 请求 Payload。销售组织是否合法,客户是否允许下单,物料是否存在,销售区域是否匹配,计量单位是否正确,项目类别如何确定,定价是否成功,合作伙伴如何派生,交货工厂如何确定,这些都可能在一次创建过程中被触发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 149

动态规划立体匹配代码_刚刚拿到腾讯等众多名企校招offer,回来总结的「动态规划」,双手奉上...

该文由刚刚拿到offer的同学写的,据说写了好几天时间,解释+代码调试,希望大家给到 赞同 和小红心♥️目录0. 首先,先大致列下这篇文章会讲到什么 1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的? 2.用不同难度的动态规划问题举例说明, 最后会使用《打家劫舍》系列三个题再重温一次. 一、动态规划带给我们的优势 传统递归 vs. DP 1. 先 递归解决...

weixin_39901439的博客 283

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Leetcode_9【动态规划】//待完善

动态规划练习题

eyas3的博客 624

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

代码随想录一刷打卡——动态规划(第一章)

一个本硕双非的小菜鸡,备战24年秋招,计划刷完卡子哥的刷题计划,加油!

qq_43264167的博客 278

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[算法]动态规范(dp)

动态规范总体思想 基于 斐波那契数列 fib(n)={1n=1或n=2fib(n−1)+fib(n−2)o/w fib(n)=\begin{cases} 1 & n=1 或 n=2 \\ fib(n-1) + fib(n-2) & o/w \\ \end{cases}fib(n)={1fib(n−1)+fib(n−2)​n=1或n=2o/w​ 动态规划解决来递归的重...

java牛牛的博客 567

动态规划立体匹配代码_动态规划 面试必考要点

目录0. 首先,先大致列下这篇文章会讲到什么 1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的? 2.用不同难度的动态规划问题举例说明, 最后会使用《打家劫舍》系列三个题再重温一次. 一、动态规划带给我们的优势 传统递归 v...

weixin_39631316的博客 128

代码随想录1刷--day9 动态规划

动态规划,英文:Dynamic Programming, 简称DP,如果某个问题有很多重叠子问题,使用动态规划是最有效的。动态规划中每一个状态一定是由上一个状态推导出来的。完全背包问题与01背包问题的区别在于,同一个物品是可以被多次选择的,在前面01背包问题中提到,对背包容量是从大到小遍历,这就是为了防止同一个物品被多次选择。理论基础:有N件物品和最多能背重量为W的背包,第i件物品的重量为weight[i],得到的价值为value[i],因此在完全背包问题中,只需要将对背包容量的遍历也变成从小到大即可。

weixin_42903300的博客 1344

动态规划算法——40道leetcode实例入门到熟练

链接:1049. 最后一块石头的重量 IIi ++) {//将stones数组一分为二,找到重量最接近target的dp数组 int dp [ ] = new int [ target + 1 ];//默认初始化为0 for(int i = 0;i ++) {//先遍历石头 for(int j = target;j --) {

qq_59708493的博客 1764

【代码随想录】动态规划专栏(java版本含注释)

该算法专栏主要补充一下动态规划的知识点 主要跟的up主,链接如下: 动态规划理论基础

码农研究僧的博客 1813

LeetCode 题解随笔:动态规划(一)

LeetCode 题解随笔:动态规划 刷题顺序参考:代码随想录

weixin_44114160的博客 438

std:string可以动态赋值么_对动态规划的理解还是差那么一点?这一篇帮你安排的明明白白!...

目录0. 首先,先大致列下这篇文章会讲到什么 1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的? 2.用不同难度的动态规划问题举例说明, 最后会使用《打家劫舍》系列三个题再重温一次. 一、动态规划带给我们的优势 传统递归 vs. DP 1. 先 递归解决 2. 后 动态规划解决 3. 动态规划 + 优化 二、动态规划四大解题步骤处理问题 案例一:打家...

weixin_39619893的博客 217

动态规划类题目专题训练 -- LeetCode上38道与动态规划相关的题

这个专题中的题目是我跟随代码随想录的刷题计划,在LeetCode上做的与动态规划相关的题目,用于加深对动态规划的理解! 下面的内容将会有每一道题目的题意、在代码随想录中对应的参考文章、我的思路以及我所写的Java代码,希望对你有帮助! 目录1 - LeetCode 509 斐波那契数2 - LeetCode 70 爬楼梯3 - LeetCode 746 使用最小花费爬楼梯4 - LeetCode 62 不同路径5 - LeetCode 63 不同路径 II6 - LeetCode 343 整数拆分 1 -

今天你学习了吗? 1117

代码随想录打卡-动态规划

并且要明确dp[i]的概念,是包含了i为下标的数的,所以要么是nums[i]加上前面的和,要么就是单独nums[i],也就是以nums[i]为一个新的开头。布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。注意:这里要求是连续的,所以不相等时的dp[i][j]不需要考虑了。注意:与上题区别是,本题不要求连续,故不相等的情况也要考虑。注意:与上题的区别是,本题不要求连续!注意:与上题的区别在于,这题要求连续。

supercool7的博客 959

代码随想录---动态规划篇

本文总结了动态规划问题的解题思路和典型例题,包括斐波那契数、爬楼梯、最小花费爬楼梯、不同路径、整数拆分和01背包等问题。主要内容包括:1)动态规划的5个核心步骤;2)各问题的状态转移方程、初始化和遍历顺序;3)代码实现示例。特别对01背包问题给出了二维和一维数组两种解法。文章通过多个经典例题展示了动态规划算法的应用,为理解和掌握动态规划提供了系统性指导。

qq_52276934的博客 858
上一篇: 198-打家劫舍(fib)
下一篇: 64-最小路径和(矩阵路径)
codrab
博客等级 码龄10年 15粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codrab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值