House Robber II
这一题跟上一题其实是一个样子的,但是这一次比较特别,是一个环,跟上一题比较,就需要区别对待一下第一个房子和最后一个就可以了,第一个房子和最后一个房子只能抢一个,所以就需要两遍上一题的过程,判断抢第一个多还是最后有一个多,返回结果。
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
if(nums.size() == 1) return nums[0];
int preRob = 0, preNotRob = 0, rob = 0, notRob = 0;
for (int i = 1; i < nums.size(); i++) {
rob = preNotRob + nums[i];
notRob = max(preNotRob, preRob);
preRob = rob;
preNotRob = notRob;
}
int res1 = max(rob, notRob);
rob = notRob = preNotRob = preRob = 0;
for (int i = 0; i < nums.size() - 1; i++) {
rob = preNotRob + nums[i];
notRob = max(preNotRob, preRob);
preRob = rob;
preNotRob = notRob;
}
return max(res1, max(rob, notRob));
}
};