题解
Medium
动态规划
将环形数组分解两个数组去处理,即[0:n-2]和[1:n-1]。最后取结果的较大值。
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
if(nums.size() == 1) return nums[0];
if(nums.size() == 2) return max(nums[0], nums[1]);
int n = nums.size();
vector<int> dp1(n), dp2(n);
dp1[0] = nums[0], dp1[1] = max(nums[0], nums[1]);
dp2[1] = nums[1], dp2[2] = max(nums[1], nums[2]);
for(int i = 2; i < n-1; i++) {
dp1[i] = max(dp1[i-1], dp1[i-2] + nums[i]);
}
for(int i = 3; i < n; i++) {
dp2[i] = max(dp2[i-1], dp2[i-2] + nums[i]);
}
return max(dp1[n-2], dp2[n-1]);
}
};