动态规划----3.打家劫舍

198. 打家劫舍 - 力扣(LeetCode)

/**

        maxRob[]: 记录结果,maxRob[i],代表偷到第i+1个房间能偷到的最大值

        只能间隔一个房间再偷(从0开始计算)

        偷到第0个房间: maxRob[0]: nums[0] (只有一个可偷)

        偷到第1个房间: maxRob[1]: Math.max(nums[0],nums[1]) (不能连着偷两个,必然是前两个中最大的) 要么偷0,要么偷1,偷最大的那个

        偷到第2个房间: maxRob[2]: Math.max(maxRob[0] + nums[2],maxRob[1]) 前两个房间中 若偷0,则maxRob[0] + nums[2](偷0可偷2) 若偷1,则maxRob[1](偷1不可偷2)

        偷到第3个房间: maxRob[3]: Math.max(maxRob[1] + nums[3],maxRob[2]) 前两个房间中 若偷1,则maxRob[1] + nums[3](偷1可偷3) 若偷2,则maxRob[2](偷2不可偷3)

        ...........

        偷到第i个房间  maxRob[i]: Math.max(maxRob[i - 2] + nums[i],maxRob[i - 1]) 若偷i - 2,则maxRob[i - 2] + nums[i](偷i - 2可偷i) 若偷i - 1,则maxRob[i - 1](偷i - 1不可偷i)

*/

class Solution {
    /**
        maxRob[]: 记录结果,maxRob[i],代表偷到第i+1个房间能偷到的最大值
        只能间隔一个房间再偷(从0开始计算)
        偷到第0个房间: maxRob[0]: nums[0] (只有一个可偷)
        偷到第1个房间: maxRob[1]: Math.max(nums[0],nums[1]) (不能连着偷两个,必然是前两个中最大的) 要么偷0,要么偷1,偷最大的那个
        偷到第2个房间: maxRob[2]: Math.max(maxRob[0] + nums[2],maxRob[1]) 前两个房间中 若偷0,则maxRob[0] + nums[2](偷0可偷2) 若偷1,则maxRob[1](偷1不可偷2)
        偷到第3个房间: maxRob[3]: Math.max(maxRob[1] + nums[3],maxRob[2]) 前两个房间中 若偷1,则maxRob[1] + nums[3](偷1可偷3) 若偷2,则maxRob[2](偷2不可偷3)
        ...........
        偷到第i个房间  maxRob[i]: Math.max(maxRob[i - 2] + nums[i],maxRob[i - 1]) 若偷i - 2,则maxRob[i - 2] + nums[i](偷i - 2可偷i) 若偷i - 1,则maxRob[i - 1](偷i - 1不可偷i)
    */
    public int rob(int[] nums) {
        int len = nums.length;
        int[] dp = new int[len];

        if(len == 1) {
            return nums[0];
        }

        //初始化
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0], nums[1]);

        //开始递推
        for(int i = 2; i < len; i++) {
            dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
        }

        return dp[len - 1];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值