方法1: 这道题是198的变种,其实改变的也很少,只是加了一个条件头尾项链。但是这就把我难住了。其实很简单,具体思路参照lc官方解答1,非常的简单明了。时间复杂m,空间复杂m。m为input数组的size。
class Solution {
public int rob(int[] nums) {
int len = nums.length;
if(len == 0) return 0;
if(len == 1) return nums[0];
int[] dp1 = new int[len];
int[] dp2 = new int[len];
dp1[0] = 0;
dp2[0] = 0;
dp1[1] = nums[0];
dp2[1] = nums[1];
for(int i = 2; i < len; i++){
dp1[i] = Math.max(nums[i - 1] + dp1[i - 2], dp1[i - 1]);
}
for(int i = 2; i < len; i++){
dp2[i] = Math.max(nums[i] + dp2[i - 2], dp2[i - 1]);
}
return Math.max(dp1[len - 1], dp2[len - 1]);
}
}
总结:
- 无