213. House Robber II (Medium)
Last updated
Last updated
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size() < 2)
{
return nums.size() == 0 ? 0 : nums[0];
}
return max(robAsLine(nums, 0, nums.size() - 2), robAsLine(nums, 1, nums.size() - 1));
}
private:
int robAsLine(vector<int>& nums, int start, int end) {
//Retuen if the size of the list smaller than 2
if (nums.size() < 2)
{
return nums.size() == 0 ? 0 : nums[0];
}
int lastTime = 0, secondLastTime = 0;
for (int l = start; l < end + 1; l++)
{
int recordLastTime = lastTime, recordSecondLastTime = secondLastTime;
secondLastTime = recordLastTime + nums[l];
lastTime = max(recordLastTime, recordSecondLastTime);
}
return max(lastTime, secondLastTime);
}
};