213. House Robber II
# Medium
Solution:
class Solution {
public:
int rob(vector<int>& nums) {
// edge case
if(nums.empty()) return 0;
if(nums.size() == 1) return nums[0];
if(nums.size() == 2) return max(nums[0], nums[1]);
// regular case
int dp1[nums.size()]; // compute nums[0:end-1]
int dp2[nums.size()]; // compute nums[1:end]
// initialize dp1 & dp2
dp1[0] = nums[0];
dp1[1] = max(nums[0], nums[1]);
dp2[0] = 0;
dp2[1] = nums[1];
// compute dp1
for(int i = 2; i < nums.size()-1; i ++) {
dp1[i] = max(dp1[i-1], dp1[i-2]+nums[i]);
}
// compute dp2
for(int i = 2; i < nums.size(); i ++) {
dp2[i] = max(dp2[i-1], dp2[i-2]+nums[i]);
}
return max(dp1[nums.size()-2], dp2[nums.size()-1]);
}
};Last updated