LeetCode 198—— 打家劫舍

阅读目录

    • [1. 题目](#1. 题目)
    • [2. 解题思路](#2. 解题思路)
    • [3. 代码实现](#3. 代码实现)

1. 题目

2. 解题思路

此题使用动态规划求解,假设 d p i 0 dpi0 dpi0 代表不偷窃第 i i i 个房屋可以获得的最高金额,而 d p i 1 dpi1 dpi1 代表偷窃第 i i i 个房屋可以获得的最高金额。那么转移方程为:

d p i + 1 0 = m a x ( d p i 0 , d p i 1 ) dpi+10 = max(dpi0, dpi1) dpi+10=max(dpi0,dpi1)

不偷窃第 i + 1 i+1 i+1 个房屋时,第 i i i 个房屋可以偷也可以不偷,所以取二者的最大值。

d p i + 1 1 = d p i 0 + n u m s i + 1 dpi+11 = dpi0 + numsi+1 dpi+11=dpi0+numsi+1

要偷窃第 i + 1 i+1 i+1 个房屋的话,第 i i i 个房屋一定不可以偷,所以取前一个房间不偷窃可以获得的最大金额再加上当前房屋的价值。

由于 d p i + 1 dpi+1 dpi+1 只和 d p i dpi dpi 有关系,所以,我们只需要两个状态值即可。

时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1).

3. 代码实现

c 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {
        int stole_value = 0;
        int not_stole_value = 0;
        int max_value = 0;
        for (int i = 0; i < nums.size(); ++i) {
            int temp = not_stole_value;
            not_stole_value = max(stole_value, not_stole_value);
            stole_value = temp + nums[i];
            max_value = max(max_value, stole_value);
        }
        return max_value;
    }
};
相关推荐
其实防守也摸鱼13 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
Nuanyt14 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
w_zero_one17 小时前
递归算法(一)
java·开发语言·算法
圣保罗的大教堂17 小时前
leetcode 3736. 最小操作次数使数组元素相等 III 简单
leetcode
文丑颜不良啊18 小时前
LeetCode1881~1990题目解析
java·leetcode
风影同志7832418 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG19 小时前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
地平线开发者19 小时前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法
京东云开发者20 小时前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品