213. House Robber II

class Solution {
public:
    int rob(vector<int>& nums)
    {
        int n = nums.size();
        if (n == 1) return nums[0];

        int excludeLast = robRange(nums, 0, n - 1);
        int excludeFirst = robRange(nums, 1, n);
        return max(excludeLast, excludeFirst);
    }
    int robRange(vector<int>& nums, int left, int right)
    {
        int robbed = 0, notRobbed = 0;
        for (int i = left; i < right; ++i)
        {
            int prevRobbed = robbed;
            robbed = max(robbed, nums[i] + notRobbed);
            notRobbed = prevRobbed;
        }
        return robbed;
    }
};
  • T: O(N)O(N)
  • S: O(1)O(1)