对于长度为n的打劫目标列表。 设立values数组,长度为n values【i】表示对于已经打劫完前i个家获取到的最大长度。 情况无非两种:
- 打劫了i-1家。第i家按规则打劫不了,跳过
- 打劫了前i-2家。取values数组下标从0到i-2的元素最大值,加上第i家的财富 以上两种情况求最大值,就是values【i】的最大财富
class Solution {
public int rob(int[] nums) {
int n = nums.length;
if(n==1) return nums[0];
if(n==2) return Math.max(nums[0],nums[1]);
int[] values = new int[n];
values[0]=nums[0];
values[1]=nums[1];
for(int i=2;i<n;i++){
int temp = values[i-1];
for(int j=0;j<i-1;j++){
temp = Math.max(temp,values[j]+nums[i]);
}
values[i] = temp;
}
int result = values[0];
for(int i=1;i<values.length;i++){
result = Math.max(result,values[i]);
}
return result;
}
}