/*
思路: dp 的公式为 dp[i] = math.max(dp[i - 2] + nums[i], dp[i - 1]) ;
由于首尾不能相连 所以 分两步 先找到除了开头的最大值 在找到除了结尾的最大值 两者最比较 大的是结果;
*/
class Solution {
public int rob(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int[] dp1 = new int[nums.length - 1];
int[] dp2 = new int[nums.length - 1];
if(nums.length == 1) return nums[0];
if(nums.length == 2) return Math.max(nums[0], nums[1]);
dp1[0] = nums[0];
dp2[0] = nums[1];
dp1[1] = Math.max(nums[0], nums[1]);
dp2[1] = Math.max(nums[1], nums[2]);
for(int i = 2; i < nums.length - 1; i++) {
dp1[i] = Math.max(dp1[i - 1], dp1[i - 2] + nums[i]);
dp2[i] = Math.max(dp2[i - 1], dp2[i - 2] + nums[i + 1]);
}
return Math.max(dp1[nums.length - 2], dp2[nums.length - 2]);
}
}
House Robber II leetcode java 走地牙
最新推荐文章于 2020-10-25 16:47:28 发布