力扣hot100 打家劫舍 DP 滚动数组

Problem: 198. 打家劫舍
在这里插入图片描述

思路

👨‍🏫 参考地址
在这里插入图片描述

复杂度

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)

💖 Code

class Solution {
	public static int rob(int[] nums)
	{
		int n = nums.length;
		if (n == 1)
			return nums[0];
		int[] f = new int[n + 1];//f[i] 表示在前 i 间房屋里能偷窃到的 最大 金额
//		初始化
		f[0] = 0;//偷 0 家金额为 0
		f[1] = nums[0];
//		状态转移
		for (int i = 2; i <= n; i++)
//							 偷当前家                      不偷当前家
			f[i] = Math.max(f[i - 2] + nums[i-1], f[i - 1]);
		return f[n];
	}
}

💖 DP空间优化版

空间复杂度: O ( 1 ) O(1) O(1)

public int rob(int[] nums) {
    int prev = 0;
    int curr = 0;

    // 每次循环,计算“偷到当前房子为止的最大金额”
    for (int i : nums) {
        // 循环开始时,curr 表示 dp[k-1],prev 表示 dp[k-2]
        // dp[k] = max{ dp[k-1], dp[k-2] + i }
        int temp = Math.max(curr, prev + i);
        prev = curr;
        curr = temp;
        // 循环结束时,curr 表示 dp[k],prev 表示 dp[k-1]
    }

    return curr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值