int rob(vector<int> &nums) { int n = nums.size(); switch (n) { case 0: return 0; case 1: return num[0]; case 2: return max(num[0], num[1]); default: int m1 = orginal_rob(nums, 0, n-1); int m2 = orginal_rob(nums, 1, n); return max(m1, m2); } }
int rob(vector<int>& nums) { int n = nums.size(); switch (n) { case 0: return 0; case 1: return nums[0]; case 2: return max(nums[0], nums[1]); default: /* * the idea is we cannot rob[0] and rob[n-1] at same time * so, we rob [0 .. n-2] or [1 .. n-1], can return the maxinum one. */ int m1 = orginal_rob(nums, 0, n-1); int m2 = orginal_rob(nums, 1, n); return max(m1, m2); } }