力扣HOT100(49)动态规划 -- 打家劫舍

先从最简单的情况入手,找规律

我们从只有 1 间房、2 间房、3 间房的情况开始,一步步推导:

  1. 只有 1 间房 [a] :没得选,只能偷这间,最多偷 a
  2. 有 2 间房 [a, b] :不能同时偷,选钱多的那间,最多偷 max(a, b)
  3. 有 3 间房 [a, b, c]
    • 选项 1:偷第 3 间房 → 不能偷第 2 间 → 最多偷 a + c
    • 选项 2:不偷第 3 间房 → 最多偷前 2 间的最大值 max(a, b)
    • 所以最多偷 max(a + c, max(a, b))

发现规律了吗? 对于第 k 间房,你只有两个选择:偷 或者 不偷,取两个选择中钱更多的那个

动态规划核心思路(一句话讲透)

dp[i] 表示前 i 间房能偷到的最高金额,那么:

  • 如果偷第 i 间房:第 i-1 间房不能偷 → 总金额 = dp[i-2] + nums[i]
  • 如果不偷第 i 间房:总金额 = dp[i-1](前 i-1 间房的最高金额)

所以状态转移方程:

复制代码
dp[i] = max(dp[i-2] + nums[i], dp[i-1])

1. 处理边界情况

  • 如果数组为空(没有房屋):返回 0
  • 如果数组只有 1 个元素(只有 1 间房):返回这个元素的值

2. 初始化 dp 数组

  • dp[0] = nums[0]:只有第 0 间房,最多偷 nums 0
  • dp[1] = max(nums[0], nums[1]):有两间房,偷钱多的那间

3. 遍历数组,计算 dp 数组

从第 2 间房开始(i=2),一直到最后一间房(i=n-1):

  • 按照状态转移方程 dp[i] = max(dp[i-2] + nums[i], dp[i-1]) 计算每一个 dp i

4. 返回结果

dp[n-1] 就是前 n 间房能偷到的最高金额

cpp 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {
        //如果没有房 返回0
        if(nums.empty()){
            return 0;
        }

        //有一个房
        int num = nums.size();
        if(num == 1){
            return nums[0];
        }

        //数组
        vector<int> dp(num);
        dp[0] = nums[0];
        dp[1] = max(nums[0],nums[1]);

        for(int i = 2;i<num;i++){
            
            dp[i] =max(dp[i-2] + nums[i],dp[i-1]);
        }

        return dp[num-1];
        
    }
};
相关推荐
GreenTea2 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20022 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
土司大王3 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹4 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
土司大王4 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
罗西的思考5 小时前
机器人模型(WM / WAM / VLA)综合分析与对比:从「看」到「想」再到「做」
人工智能·算法·机器学习
Logic1016 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
小哈里6 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军7 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司7 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算