class Solution {
public:
int rob(vector<int>& nums) {
if(0 == nums.size())
return 0;
if(1 == nums.size())
return nums[0];
return max(robLine(nums.begin(), nums.end()-2), robLine(nums.begin()+1, nums.end()-1));
}
int robLine(vector<int>::iterator low, vector<int>::iterator high) {
int sz = high - low + 1;
if(0 == sz)
return 0;
if(1 == sz)
return *low;
if(2 == sz)
return max(*low, *high);
vector<int> max_chosen (sz, 0x80000000);
vector<int> max_unchosen (sz, 0x80000000);
max_chosen[0] = *low; max_unchosen[0] = 0;
max_chosen[1] = *(low+1); max_unchosen[1] = max_chosen[0];
for(int i = 2; i < sz; ++i){
max_chosen[i] = *(low+i) +max(max_chosen[i-2], max_unchosen[i-2]);
max_unchosen[i] = max(max_chosen[i-1], max_unchosen[i-1]);
}
return max(max_chosen.back(), max_unchosen.back());
}
};
213. House Robber II
最新推荐文章于 2024-05-01 19:56:49 发布