LeeCode213打家劫舍Ⅱ(Java)(dp动态规划)

题目链接:LeeCode213打家劫舍Ⅱ
题目描述:在这里插入图片描述
根据Leetcode198打家劫舍的思路多一个限制就是用1不能用n,用n不能用1,所以开了两个数组,一个存除了1的最大值,一个存除了n的最大值

class Solution {
    
    
    public static int rob(int[] nums) {
    
    
        if(nums.length==1)return nums[0];
        if(nums.length==2)return Math.max(nums[0], nums[1]);
        int[][] dp=new int[2][nums.length];
        dp[0][0]=nums[0];
        dp[0][nums.length-1]=0;
        dp[0][1]=Math.max(nums[0], nums[1]);
        dp[1][0]=0;
        dp[1][1]=nums[1];
        for (int i = 2; i < nums.length; i++) {
    
    
            if(i!= nums.length-1) dp[0][i]=Math.max(dp[0][i-2]+nums[i],dp[0][i-1]);
            else dp[0][i]=dp[0][i-1];
            dp[1][i]=Math.max(dp[1][i-2]+nums[i],dp[1][i-1]);
        }
        return Math.max(dp[0][nums.length-1],dp[1][nums.length-1]);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43590593/article/details/113697840