力扣刷题记录 -- JAVA---114--213. 打家劫舍 II

目录

  • 一、题目
  • 二、代码
  • 三、运行结果


一、题目

力扣刷题记录 -- JAVA---114--213. 打家劫舍 II_第1张图片

二、代码

class Solution 
{
    public int rob(int[] nums) 
    {
        int i;
        int length = nums.length;
        
        if(length==1) return nums[0];
        if(length==2) return Math.max(nums[0],nums[1]);
        if(length==3) return Math.max(nums[0],Math.max(nums[1],nums[2]));
        
        int[] dp = new int[length];


        //三种情况 都算一遍就好了
        //偷第一家
        dp[0] = nums[0];
        dp[1] = nums[0];

        for(i=2;i<=length-2;i++)
        {
            dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);
        }
        dp[length-1] = dp[length-2];

        //偷最后一家
        int[] dp_last = new int [length];
        dp_last[0]=0;
        dp_last[1] = nums[1];
        for(i=2;i<=length-3;i++)
        {
            dp_last[i] = Math.max(dp_last[i-2]+nums[i],dp_last[i-1]);
        }
        dp_last[length-1] = dp_last[length-3]+nums[length-1];

        //两家都不偷
        int[] dp_none = new int[length];
        dp_none[0] = 0 ;
        dp_none[1] = nums[1];
        for(i=2;i<=length-2;i++)
        {
            dp_none[i] = Math.max(dp_none[i-2]+nums[i],dp_none[i-1]);
        }      
        
        dp_none[length-1] = dp_none[length-2];

        return Math.max(dp[length-1],Math.max(dp_last[length-1],dp_none[length-1]));


    }
}

三、运行结果

力扣刷题记录 -- JAVA---114--213. 打家劫舍 II_第2张图片

你可能感兴趣的:(#,leetcode,java,python)