class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size();
if (n == 1) return nums[0];
vector<int> dp1(n + 1), dp2(n + 1);
// 不偷最后一家
for (int i = 0; i < n - 1; i++) {
dp1[i + 2] = max(dp1[i + 1], dp1[i] + nums[i]);
}
// 不偷第一家
for (int i = 1; i < n; i++) {
int j = i - 1;
dp2[j + 2] = max(dp2[j + 1], dp2[j] + nums[i]);
}
return max(dp1[n], dp2[n]);
}
};

京公网安备 11010502036488号