简单的DP问题,因为状态转移方程仅仅和当前元素的前几个节点有关,因此不需要维护一个dp一维数组,和跳台阶问题一样,仅仅需要维护几个元素即可。
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
int n = nums.size();
if(n == 1) return nums[0];
if(n == 2) return max(nums[0], nums[1]);
//初始值设置
int first = nums[0], second = max(nums[0], nums[1]), third;
for(int i = 2; i < n; i++) {
third = max(second, first + nums[i]);
first = second;
second = third;
}
return third;
}
};