c++代码
利用动态规划思想
先计算出dp[0] dp[1] 即偷或不偷前两个房子的最大偷窃金额
然后每次迭代选择:
max(dp[i-1], dp[i-2] + nums[i]);//核心代码
class Solution {
public:
int max(int a, int b)
{
return a>b ? a : b;
}
int rob(vector<int>& nums)
{
int len = nums.size();
int *dp = new int[len];
if (len == 0)
{
return 0;
}
if (len == 1)
{
return nums[0];
}
dp[0] = nums[0];
dp[1] = max(dp[0], nums[1]);
for (int i = 2; i < len; i++)
{
dp[i] = max(dp[i-1], dp[i-2] + nums[i]);//核心代码
}
return dp[len-1];
}
};