题目
- 给一个数组,可以取其中的数字,要求是不能同时取相邻近的数字
- 返回可以取数字的 sum 的最大值
思路
-
dp
-
遍历下标,当前位置可以取到的最大值,为下述两种方式的最大值
- 取当前位置 + 取 - 2 位置的和
- 不取当前位置,等于取 -1 位置的值
代码
class Solution {
public:
int rob(vector<int>& nums) {
vector<int> dp(nums.size()+1);
dp[0] = 0;
dp[1] = nums[0];
for (int i = 1; i < nums.size(); i++) {
dp[i+1] = max(nums[i] + dp[i-1], dp[i]);
}
return dp[nums.size()];
}
};