213.打家劫舍II

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了213.打家劫舍II相关的知识,希望对你有一定的参考价值。

213.打家劫舍II

思路

  • 考虑不包含头元素和不包含尾元素的两种情况,取最大值;
  • 利用函数求区间的最大金额
class Solution 
    public int rob(int[] nums) 
        if(nums.length == 1) return nums[0];
        if(nums.length == 2) return Math.max(nums[0],nums[1]);
        // 不包含尾元素的区间最高金额
        int r1 = robRange(nums,0,nums.length-1);
        int r2 = robRange(nums,1,nums.length);
        return Math.max(r1,r2);
    
    // 返回指定区间的最高金额
    public int robRange(int[] nums,int start ,int end)
        // 单个元素直接返回
        if(start == end) return nums[start];
        int size = nums.length;
        int[] dp = new int[size];
        // 开始区间的前两个元素初始化为nums对应的金额,dp【start+1】为前两个最大
        dp[start] = nums[start];
        dp[start + 1] = Math.max(nums[start],nums[start+1]);
        // 从开始位置第三个开始,到end结束。
        for(int i = start + 2;i < end;i++)
            dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);
        
        // 返回 end 的值
        return dp[end-1];
    

以上是关于213.打家劫舍II的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--213打家劫舍II

算法:打家劫舍213. House Robber II

213-打家劫舍 II

LeetCode-213. 打家劫舍 II

213 House Robber II 打家劫舍 II

1线性DP 213. 打家劫舍 II