public class Solution {
public int rob(int[] nums) {
if (nums.length == 0) {
return 0;
}
if (nums.length == 1) {
return nums[0];
}
if (nums.length == 2) {
return Math.max(nums[0], nums[1]);
}
int penultimate = Math.max(nums[0], nums[1]);
int antepenultimate = nums[0];
int last = 0;
for (int i = 2; i < nums.length - 1; i++) {
last = Math.max(antepenultimate + nums[i], penultimate);
antepenultimate = penultimate;
penultimate = last;
}
last = Math.max(antepenultimate + nums[nums.length - 1], penultimate);
//没有使用最后一个,符合题意。
if (last == penultimate) {
return last;
}
//首尾均使用,不符合题意,保存结果,再逆序求解。
int caseOne = penultimate;//使用第一个,没有使用第二个。
int len = nums.length;
antepenultimate = nums[len - 1];
penultimate = Math.max(nums[len - 1], nums[len - 2]);
last = nums[len - 2];
for (int i = len - 3; i >0; i--) {
last = Math.max(antepenultimate + nums[i], penultimate);
antepenultimate = penultimate;
penultimate = last;
}
return Math.max(last, caseOne);
}
}
House Robber II
最新推荐文章于 2022-11-01 19:16:12 发布