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

面试必看:打家劫舍

【动态规划】详解打家劫舍问题(不触发警报的最大金额)

一、题目描述

给定一个非负整数数组nums,数组中的每个元素代表对应房屋存放的金额。小偷偷窃时需遵守规则:不能偷窃相邻的两间房屋(否则警报会触发)。请计算在不触动警报的情况下,小偷一夜之间能偷窃到的最高金额。

二、解题思路分析

这是一道典型的动态规划问题,核心特征是“当前最优解依赖于前序子问题的解”,具体分析如下:

  1. 问题核心
    对于第i间房屋,有两种选择:偷或不偷。

    • 偷:则第i-1间房屋不能偷,最高金额为“前i-2间房屋的最高金额 + 第i间房屋的金额”;
    • 不偷:则最高金额等于“前i-1间房屋的最高金额”。
      最终取两者中的较大值,即为前i间房屋的最优解。
  2. 优化空间的动态规划思路
    常规动态规划会用数组存储每一步的结果,但本题可发现:计算第i间房屋的最优解仅需前两步的结果,因此无需额外数组,只需两个变量即可:

    • first:表示前i-2间房屋能偷到的最高金额;
    • second:表示前i-1间房屋能偷到的最高金额。
      遍历从第3间房屋(索引为2)开始,每次通过max(first + nums[i], second)计算当前最优解,再更新firstsecond为下一步做准备。
三、完整代码实现
#include<vector>#include<algorithm>usingnamespacestd;classSolution{public:introb(vector<int>&nums){intn=nums.size();// 处理边界情况:只有1间房屋时,直接返回该房屋金额if(n==1){returnnums[0];}// first:前i-2间房屋的最高金额(初始为第0间)intfirst=nums[0];// second:前i-1间房屋的最高金额(初始为前2间的最大值)intsecond=max(nums[0],nums[1]);intresult=second;// 从第3间房屋(索引2)开始遍历for(inti=2;i<n;i++){// 状态转移:偷第i间(first+nums[i])或不偷(second),取最大值result=max(first+nums[i],second);// 更新前两步的状态,为下一次遍历做准备first=second;second=result;}returnresult;}};
四、复杂度分析
  1. 时间复杂度:O(n)
    仅需遍历一次数组(从索引2到末尾),遍历次数与房屋数量n成正比,因此时间复杂度为线性级别。

  2. 空间复杂度:O(1)
    全程仅使用了firstsecondresult等有限个变量,未开辟额外的数组或容器,空间开销为常数级。

五、补充说明
  • 代码中优先处理了n == 1的边界情况,避免后续对nums[1]的访问越界;
  • 初始时secondmax(nums[0], nums[1]),是因为前两间房屋只能选其中金额更高的那一间;
  • 这种用变量代替数组的写法,是动态规划的“空间优化”技巧,在仅依赖前有限步结果的场景中非常实用。

总结

  1. 打家劫舍问题的核心是“不能偷相邻房屋”,每一步的最优解仅依赖前两步的结果,具备最优子结构特性;
  2. firstsecond两个变量代替传统DP数组,可将空间复杂度从O(n)优化至O(1),状态转移核心为max(first + nums[i], second)
  3. 时间复杂度为O(n),是该问题的最优解法,需注意处理房屋数量为1的边界情况。
http://www.jsqmd.com/news/377653/

相关文章:

  • 2026年工业研学公司综合评测:聚焦科创实践与产教融合的新趋势​ - 品牌2025
  • 【Python毕设全套源码+文档】基于python的租房管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 56周作业
  • 2026年工业焊接协作机器人知名品牌商选择指南,推荐上海广为 - 品牌2025
  • comsol多孔介质流燃烧器模型,集层流流动模块,流体传热模块,浓物质传递模块和化学反应模块于...
  • 50.k8s管理-1和 k8s核心概述-2 - 实践
  • 【Python毕设全套源码+文档】基于python的个人身心健康管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 2026年全国防爆墙厂家哪家靠谱?靠谱优质实力强劲 适配多场景防护需求 覆盖全国多区域需求 - 深度智识库
  • 车桥耦合Matlab程序:Newmark法数值积分实现动力学求解
  • AT_agc013_d [AGC013D] Piling Up
  • 2026年汽车应急启动电源十大品牌推荐深度解析 - 品牌2025
  • 那些年我们create generate clock遇到的坑
  • 武商一卡通使用与回收:超实用指南让你轻松搞定 - 团团收购物卡回收
  • 2026年优选五大汽车电瓶设备公司选择指南 - 品牌2025
  • 2026年汽车电瓶设备出口公司推荐:全球市场中的中国智造力量 - 品牌2025
  • 详细介绍:D3.js研发交互模型指标柱形图
  • 售后完善的架空保温管价格如何,怎么选购 - mypinpai
  • 毕业论文神器!9个AI论文软件深度测评,本科生高效写作必备
  • 【python毕设源码分享】基于Python的个人身心健康管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 剖析实力强的氟橡胶制品,江苏衡水联奥橡塑获客户认可 - 工业品牌热点
  • 91.不同路径
  • 2026年开放大学排名,湖北开放大学监考严格吗 - 工业品网
  • 电脑死机怎么办?
  • 【论文常识】拆解降重工具的“技术底牌”:什么才是真正的快速迭代?
  • 门窗加盟必须要去看的展会有哪些?2026五大行业展会全解析|加盟风向标 - 匠言榜单
  • 【写作技巧】降重“后遗症”自救指南:当AI改完,论文变得不像你写的了
  • 工厂质量检测具体案例:三维扫描如何提升尺寸检测效率与一致性 - 工业三维扫描仪评测
  • 解读高性价比玻璃钢连续缠绕管道加工厂年度排名及特色 - 工业推荐榜
  • 【Python毕设全套源码+文档】基于python的Flask和Vue的电商管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 【CSDN观察】从套利时代到管理红利:2026年,创新企业生存法则的全面重写