原题目:https://leetcode-cn.com/problems/house-robber/
思路:
动态规划。每次调最贵的偷,转移方程为nums[i] = max(nums[i] + nums[i-2] , nums[i-1]);
注意边界情况,nums[1] = max(nums[0],nums[1])
代码:
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.size()==0) return 0;
if(nums.size()==1) return nums[0];
int len = nums.size();
nums[1]=max(nums[0],nums[1]);
for(int i=2;i<len;i++){
nums[i] = max(nums[i-2]+nums[i],nums[i-1]);
}
return max(nums[len-2],nums[len-1]);
}
};