problem
solution
維護一個dp,max(dp[i-1], dp[i-2]+nums[i])
1 | class Solution { |
- reduce dp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19class Solution {
public:
int rob(vector<int>& nums) {
// 1 2 3 1
// 1 2 4 4
int n = nums.size();
vector<int> dp(n,0);
if(n==1) return nums[0];
int dp0 = nums[0], dp1 = max(nums[0], nums[1]);
int ret = dp1;
for(int i=2;i<n;++i){
ret = max(dp0 + nums[i], dp1);
dp0 = dp1;
dp1 = ret;
}
return ret;
}
};analysis
- time complexity
O(n)
- space complexity
O(n)
->O(1)