打家劫舍--leecode 动态规划

【动态规划】leecode 198的打家劫舍1:为啥是dp而不是贪心 摘要: 本文分析了LeetCode 198题"打家劫舍"的动态规划解法。通过比较dp[n+1]和dp[n]两种写法,阐述了核心状态转移方程:dp[i] = max(dp[i-1], dp[i-2]+nums[i])。文章用通俗语言解释了为何这不是贪心算法(局部最优≠全局最优)和暴力穷举(O(n)优于O(2^n)),并展示了滚动变量优化空间复杂度为O(1)的技巧。通过示例[2,7,9,3,1]逐步演示算法过程,最终得出正确解12。两种dp数组写法差异在于:n+1长度时dp[1]对应nums 阅读详情
    public static int rob(int[] nums) {
        if (nums == null) {
            return 0;
        }
        int n = nums.length;
        if (n == 0) {
            return nums[0];
        }
        int[] C = new int[n];
        for (int i = 0; i < n; i++) {
            if (i == 0) {
                C[i] = nums[i];

            }
            if (i == 1) {
                C[i] = Math.max(nums[0], nums[1]);
            }
            if (i >= 2) {
                C[i] = Math.max(C[i - 1], nums[i] + C[i - 2]);
            }
        }
        return C[C.length - 1];
    }

 

【动态规划】leecode 198的打家劫舍2:dp集合有两种写法对比 LeetCode 198打家劫舍问题的DP解法主要有两种数组定义方式: 长度n+1的DP数组: dp[0]表示0个房子的金额0 dp[i]对应nums[i-1] 转移方程:dp[i] = max(dp[i-1], dp[i-2]+nums[i-1]) 优点:数学定义清晰 缺点:索引需要偏移 长度n的DP数组: dp[0]直接表示第一个房子 dp[i]对应nums[i] 转移方程:dp[i] = max(dp[i-1], dp[i-2]+nums[i]) 优点:索引直观 缺点:初始条件不够直观 两种方法核心思 阅读详情

相关推荐

学习Ultralytics (下载)

Ultralytics由创立,最初是为了简化目标检测模型的开发和应用,专注于构建高效、易用、性能卓越的深度学习框架。其主要产品之一是 YOLO 系列模型,尤其是最新的YOLOv5和YOLOv8,因其在精度、速度和可扩展性方面的出色表现而广受欢迎。

2301_76846375的博客 2865

leetcode--打家劫舍

leetcode--打家劫舍

navylhjjlh的博客 790

别再瞎改注册表了!实测Win10/Win11远程桌面60帧的正确姿势(附ToDesk对比)

本文深入解析Windows远程桌面60帧优化的科学方法,揭示常见误区并提供实测有效的解决方案。从版本差异到硬件加速,再到第三方工具对比(如ToDesk),帮助用户避开无效的注册表修改,实现流畅的远程桌面体验。

weixin_33738555的博客 344

Leecode---动态规划---打家劫舍 / 乘积最大子数组

Leecode---动态规划---打家劫舍 / 乘积最大子数组

qq_41920323的博客 538

手把手教你理解特斯拉Model 3的域控制器架构:RBCM如何成为“多面手”?

本文深入解析特斯拉Model 3的域控制器架构,重点介绍右车身域控制器(RBCM)如何整合车身电子系统功能。RBCM作为多任务处理中枢,管理空调系统、尾部电气设备和超声波雷达等关键功能,展现了特斯拉在汽车电子架构上的创新设计。文章详细探讨了RBCM的硬件架构、功能版图及信号网络,揭示其如何通过高性能MCU和智能开关技术实现功能集中与效率提升。

weixin_30919429的博客 384

一本集成电路静态时序设计经典之作(可下载)

本书全面深入探讨集成电路设计中关键技术的专著,涵盖了从基础知识到高级应用的各个方面。本书详细介绍了集成电路的发展历程、**静态时序分析的重要性、基本时序模型、时序信息库文件的构建、时序约束的设置、串扰噪声的影响及其控制方法**,并通过实战案例展示了如何进行有效的时序分析和优化。

nuoweishizi的博客 852

动态规划(二) —— 打家劫舍系列问题总结

除了背包系列问题,打家劫舍系列问题同样也是动态规划的经典题目。在这篇文章中荔枝将会把打家劫舍系列问题做一下总结,再仔细体会动态规划的思想,希望能帮到有需要的小伙伴~~~

荔枝当大佬的博客 642

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 599

图解动态规划的解题四步骤

如果你对于动态规划还不是很了解,或者没怎么做过动态规划的题目的话,那么 House Robber (小偷问题)这道题是一个非常好的入门题目。本文会以 House Robber 题目为例子,讲解动态规划题目的四个基本步骤。 动态规划的的四个解题步骤是: 定义子问题 写出子问题的递推关系 确定 DP 数组的计算顺序 空间优化(可选) 下面我们一步一步地进行讲解。 步骤一:定义子问题 稍微接触过一点...

java牛牛的博客 8245

绕线机的制作与研究

本文详细阐述了绕线机的制作过程,涵盖从设计规划到实际制作的各个环节。通过对绕线机工作原理的深入分析,确定了关键技术参数,并依此完成机械结构与控制系统的设计。在制作阶段,运用多种加工工艺完成零件制造与设备组装。经测试,自制绕线机性能达到预期,能够满足特定线圈绕制需求,为相关领域的生产实践与技术研究提供了参考。

道亦无名 1437

YOLO26改进策略【YOLO和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制

本文记录的是利用模块优化的目标检测网络模型。模块具有独特优势。它不同于传统模块,能同时兼顾局部特征高效建模与长距离交互学习。常见模块要么在局部特征处理上有优势但长距离交互能力弱,要么反之,而模块克服了此问题。它融合了Mamba模型和线性注意力机制的优势,通过独特的结构设计,能够在保持计算效率的同时,精准地建模局部特征并学习长距离交互信息。本文将其用于的模型改进和二次创新,能够更加关注图像中的重要特征区域,抑制背景等无关信息的干扰,从而突出目标物体的关键特征。Demystify Mamba in Vision

Limiiiing的博客 214

LeetCode动态规划篇:经典打家劫舍问题

经典动态规划题

玦尘的博客 2002

高速电路设计必看:同步开关噪声问题解析

数字电路中的同步开关噪声(SSN)问题日益突出,尤其是随着高速器件应用增多。本文分析了地弹和电压弹的产生机理,指出其与电源网络电感、输出驱动电流变化率密切相关。文章详细阐述了地弹参数特征,包括峰值电压、脉冲宽度等关键指标,并探讨了负载电容、信号压摆率等因素对地弹的影响。最后提出系统化的解决方案,涵盖芯片选型、电路设计、PCB布局和后期调试等多个环节,强调通过降低回路电感和控制电流变化率来有效抑制SSN。这些措施需要在性能、成本和复杂度之间取得平衡,为高速数字电路设计提供了重要参考。

一只豌豆象的博客 299

动态规划之打家劫舍Leecode

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

qq_43380861的博客 166

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

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

动态规划--leecode经典问题打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。我们可以设计一个二维的数组用来存放状态,该数组的行数为2,列数为nums的长度,即dp[nums.length][2]初始情况为dp[0]=nums[0],dp[1]=Math.max(nums[0],nums[1])dp[i][0]表示前i-1间房屋的打劫情况未知,不打劫第i间房屋时获得的金额总和。dp[i][1]表示前i-1间房屋的打劫情况未知,打劫第i间房屋时获得的金额总和。dp数组的初始状态为dp[0][0]=0,dp[0][1]=nums[0]...

Always1172的博客 213

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

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

(day28)leecode动态规划——打家劫舍

稍微接触过一点动态规划的朋友都知道动态规划有一个 “子问题” 的定义。什么是子问题?子问题是和原问题相似,但规模较小的问题。例如这道小偷问题,原问题是 “从全部房子中能偷到的最大金额”,将问题的规模缩小,子问题就是 “从 k 个房子中能偷到的最大金额 ”,用 f(k) 表示。可以看到,子问题是参数化的,我们定义的子问题中有参数 k。假设一共有 n 个房子的话,就一共有 n 个子问题。动态规划实际上就是通过求这一堆子问题的解,来求出原问题的解。这要求子问题需要具备两个性质:原问题要能由子问题表示。

m0_54414851的博客 1443

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Leecode】动态规划篇 之 打家劫舍(一)

动态规划 对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了! 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够

Quanquanxiannv的博客 168

LeeCode198打家劫舍(Java)(动态规划dp)

题目链接:LeeCode198打家劫舍 题目描述: 经典动态规划,房屋数在3以内时,所获得的最大利益一定是nums[0]+nums[2]或nums[1],而nums[3]时能获得的最大利益一定是nums[0]时获得的最大利益加本身或者nums[1]时获得的最大利益加本身,因为小偷肯定一次跑2步或者跑3步,跑4步会变成两个2步会漏掉中间的。 状态转移方程:dp[i]=Math.max(dp[i-2],dp[i-3])+nums[i]; class Solution { public static in

weixin_43590593的博客 254

leecode-打家劫舍-动态规划

【代码】leecode-打家劫舍-动态规划。

qq_51219814的博客 30

LeeCode213打家劫舍Ⅲ(Java)(树状动态规划)

题目链接:LeeCode213打家劫舍Ⅲ 题目描述: 这题看了Leetcode大神liweiwei1419的题解,感觉自己还是太菜了,其实这题原理跟打家劫舍Ⅰ,Ⅱ是一模一样的,但是可能由于我对树的理解有点浅,所以自己写了一个没跑过去。然后说说这题的思路 思路 新了解一个词叫后效性,虽然已经做了好几个类似的题了,我竟然也是看了题解才知道股票类型的题和这个还有打家劫舍都是一种题型。那下面说一下什么叫后效性。 后效性: 我理解的后效性就是当前状态会影响之后的状态,使得后面的状态不确定 所以一般有后效性的题都要

weixin_43590593的博客 220

LeeCode213打家劫舍Ⅱ(Java)(dp动态规划)

题目链接:LeeCode213打家劫舍Ⅱ 题目描述: 根据Leetcode198打家劫舍的思路多一个限制就是用1不能用n,用n不能用1,所以开了两个数组,一个存除了1的最大值,一个存除了n的最大值 class Solution { public static int rob(int[] nums) { if(nums.length==1)return nums[0]; if(nums.length==2)return Math.max(nums[0], nums[1]

weixin_43590593的博客 221

代码随想录算法训练营第四十八天|打家劫舍专题

目录 LeeCode 198.打家劫舍 LeeCode 213.打家劫舍II LeeCode337.打家劫舍 III LeeCode 198.打家劫舍 198. 打家劫舍 - 力扣(LeetCode) 动归五部曲: 1.确定dp数组及下标含义: dp[i]: 考虑下标i(包括i)以内的房屋,最多可以偷窃的金额; 2.确定递推公式: dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]); 3.dp数组如何初始化:dp[0] = nums[0]; dp[1]

weixin_74976519的博客 607

【刷题实录之动态规划】leecode198. 打家劫舍

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,如果不偷第i房间,那么dp[i] = dp[i - 1],即考虑i-1房,然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。(1)确定dp数组(dp table)以及下标的含义:dp[i],考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。输入:[1,2,3,1]

@啊哈哈哈哈哈韩的博客 410

【刷题实录之动态规划】leecode337. 打家劫舍 III

(如果对下标含义不理解就再回顾一下dp数组的含义),如果不偷当前节点,那么左右孩子就可以偷,至于到底偷不偷一定是选一个最大的,所以:val2 = max(left[0], left[1]) + max(right[0], right[1]),最后当前节点的状态就是{val2, val1};即:{不偷当前节点得到的最大金钱,偷当前节点得到的最大金钱}。(3)确定终止条件:在遍历的过程中,如果遇到空节点的话,很明显,无论偷还是不偷都是0,所以就返回,所以本题dp数组就是一个长度为2的数组。

@啊哈哈哈哈哈韩的博客 456

198. 打家劫舍一 (Java)(经典动态规划问题) Leecode

此题为打家劫舍问题的第一种,也是剩下俩种的核心。后面两种其实是这一种的变体。 问题往简单想,只有当前数组元素抢与不抢。 如果当前节点没有被抢,也就是第n个节点没有被抢,dp[n] = dp[n-1], dp[n+1] = dp[n] + num = dp[n-1] + num 如果当前节点被抢,也就是第n个节点被抢, 此时**dp[n+1]**不能被抢。因为相邻节点不能被抢。 初始状态: 前0间房子的最大偷窃价值为0,dp[0] = 0 转移方程: (也就是偷取n+1时,要判断的条件) dp[n+1] =

迪文的博客 652

leecode第12天,动态规划之爬楼梯,打家劫舍,三角形最小路径和

第一题爬楼梯,个人感觉很像高中写的那种证明题,找到通用公式再确定几个初始值,然后就入循环就好了,感觉属于想得出来公式就做得出来,想不出来就想不出来的那种,唉直接看代码? class Solution { public int climbStairs(int n) { int p = 0; int q = 0; int r = 1; for(int i =0;i<n;i++){ p = q; ..

zzzzztwerfxd的博客 385
上一篇: 买卖股票的最佳时机—leecode(可以多次交易—贪心算法)
下一篇: 计数质数(统计所有小于非负整数 n 的质数的数量【n为100以内】)
wenyixicodedog
博客等级 码龄8年 87粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值