首页 > 技术文章 > LeetCode 198. 打家劫舍

wululuwululu 2021-01-04 22:26 原文

Leetcode Acwing

动态规划 \(O(n)\)

使用两个状态表示

f[i]表示1~i家中必偷i家的偷窃最大金额

g[i]表示1~i家中必不偷i家的偷窃最大金额

image-20210104221948978

时间复杂度

\(O(n)\)

空间复杂度

\(O(2n)\)

Tip

以后能一眼看出来的复杂度我就不写了

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        if (!n) return 0;
        vector<int> f(n), g(n);
        f[0] = nums[0];

        for (int i = 1; i < n; i ++)
        {
            f[i] = g[i - 1] + nums[i];
            g[i] = max(g[i - 1], f[i - 1]);
        }
        
        return max(f[n - 1], g[n - 1]);
    }
};

推荐阅读