当前位置: 首页 > news >正文

从递归到 DP:我是怎么把打家劫舍写对的

这道198. 打家劫舍​ 算是动态规划的“入门必修课”了。虽然题目说得挺刺激我要去偷东西了但其实逻辑非常严谨。我做这道题的时候最大的误区就是“贪心思维”​ —— 以为挑钱多的拿就行结果直接翻车。 题目速览你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组计算你不触动警报装置的情况下一夜之内能够偷窃到的最高金额。示例输入[1,2,3,1] 输出4 解释偷 nums[0] nums[2] 1 3 4 我的第一反应贪心陷阱刚看到题我心想这还不简单“那我肯定是尽量偷大的啊”比如[2, 1, 1, 2]我第一反应是直接拿两个 2加起来是 4。但这明显错了因为两个 2 是相邻的报警器会响。结论这不是一道“挑最大数”的题而是一道“取舍”的题。 真正的进阶状态定义冷静下来想对于第i个房间我只有两种选择偷那我就不能偷第i-1个收益是nums[i] dp[i-2]不偷那我就可以继承第i-1个的收益也就是dp[i-1]所以状态转移方程就出来了dp[i] Math.max(dp[i-1], nums[i] dp[i-2])✅ 最终代码滚动数组优化虽然可以用数组但我面试时更喜欢写滚动变量省空间也显得熟练。class Solution { public int rob(int[] nums) { int n nums.length; if (n 0) return 0; if (n 1) return nums[0]; int first 0; // dp[i-2] int second 0; // dp[i-1] for (int i 0; i n; i) { int temp second; // 暂存 dp[i-1] second Math.max(second, first nums[i]); first temp; } return second; } } 执行过程拆解nums [1,2,3,1]inums[i]first (dp[i-2])second (dp[i-1])计算过程当前最优0100max(0, 01)11201max(1, 02)22312max(2, 13)43124max(4, 21)4✅ 最终返回 4。 我踩过的坑边界没处理好一开始忘了n 0或n 1的情况直接报错。变量顺序写反必须先存second再更新否则first就被覆盖了。误以为是贪心千万别直接选最大的要看“能不能选”。 一句话总结打家劫舍的本质是“选或不选”​ 的博弈。对于当前房子要么偷加上上上个的最大值要么不偷继承上一个的最大值。 面试收尾建议直接背“这道题是典型的线性 DP。定义dp[i]为前i个房屋能偷到的最大金额。对于第i个房间如果偷就不能偷i-1所以是nums[i] dp[i-2]如果不偷就是dp[i-1]。为了优化空间我使用了滚动变量来代替数组。”
http://www.gsyq.cn/news/1336082.html

相关文章:

  • 从递归到数学规律:我是怎么把杨辉三角写对的
  • MySQL新手必看:Navicat导入SQL文件报错1046?三步搞定数据库选择问题
  • 微生物网络分析终极指南:NetCoMi如何帮你3步构建复杂关联网络
  • 收藏备用!【2025 版】CMD 命令超详细大全,零基础全覆盖
  • 3分钟实现CAD建模革命:Zoo Text-to-CAD如何让文字描述秒变3D模型?
  • YimMenu:基于现代C++的GTA V模块化反作弊与安全架构深度解析
  • Adobe-GenP 3.0:5分钟快速激活Adobe全系列软件的专业指南
  • 轻量级人脸检测方案:解决移动端AI视觉部署的核心痛点
  • LDDC终极指南:如何快速获取精准歌词,让你的音乐体验完美同步![特殊字符]
  • 3分钟搞定多版本PHP环境管理:phpenv终极指南 [特殊字符]
  • python海龟绘图之绘图窗口操作
  • YimMenu:GTA5终极安全防护与游戏体验优化完整指南
  • 基于SSM的在线预约导游系统(10068)
  • CANN/asc-devkit OpHostCPUDef引擎配置
  • 嵌入式Linux实战:手把手教你为EC20 4G模块编译GobiNet驱动(含内核配置与常见编译错误解决)
  • 3分钟上手Transmission:零门槛掌握免费BT下载神器
  • Squash实战案例:快速定位和修复微服务计算错误
  • 揭秘多语言电子书语音合成:ebook2audiobook技术深度解析
  • 6月PMP报考人数暴涨30%,背后发生了什么?
  • 字节面试官:你知道Claude Code的多Agent实现机制吗?
  • LibreSprite完全指南:免费开源的像素艺术与动画制作神器
  • GGCNN实战指南:基于深度学习的实时机器人抓取生成网络深度解析
  • 统信系统小程序(四)linux环境下的python程序打包Nuitka工具
  • Python图像处理避坑指南:TIF转PNG时,用GDAL还是PIL/OpenCV?看完这篇再决定
  • PyTorch实战(35)——使用PyTorch Profiler分析模型推理性能
  • 使用Python快速上手Taotoken实现你的第一个大模型对话
  • 10分钟精通:如何在VSCode中实现专业级图表实时预览?
  • 离子交换柱生产厂家哪家靠谱?水喷式真空泵厂家推荐:丰亿环保领衔,2026年国内优质水喷式真空泵与离子交换柱生产厂家盘点 - 栗子测评
  • applera1n:免费绕过iOS 15-16激活锁的终极指南
  • 混合搅拌机厂家哪家好?干法制粒机生产厂家哪家好?2026年国内靠谱厂家实力盘点与推荐:科洛伊机械领衔 - 栗子测评