Leetcode——198. 打家劫舍

题目描述:题目链接

这道题目也是一道动态规划的题目:

分析一道动态规划的题目可以将解决问题的思路分为下面三个部分:

1:问题的描述。可以定义数组d[ i ] 用于表示第i -1家可以获得的最大金额。

2:给出递推公式:d[ i ] = max( d[i-1] , d[i-2] + nums[i] );

3:给出递推公式的初始值:d[0] = nums[0],  d[1] = max( nums[0] , nums[1] );

下面可以根据上面的思路给出本题的解决思路:

class Solution {
    public int rob(int[] nums) {
        int len = nums.length;
        if(len == 0){
            return 0;
        }
        if(len == 1){
            return nums[0];
        }
       
        //定义数组d[i]为i+1家可以获得的最大数
        int[] d = new int[len];
        d[0] = nums[0];
        d[1] = Math.max(nums[0],nums[1]);
        if(len == 2){
            return  d[1];
        }
        int max = -1;
        for(int i = 2; i < len ; i++){
            d[i] = Math.max(d[i-1],d[i-2]+nums[i]);
            if(d[i] >= max){
                max = d[i];
            }
        }
        return max;
    }
}

猜你喜欢

转载自www.cnblogs.com/xiaxj/p/9692606.html