// 动态规划出最大值和第二大的值,并不断更新最大值
int rob(int* nums, int numsSize)
{
if (numsSize == 1)
{
return nums[0];
}
else if (numsSize == 2)
{
return fmax(nums[0], nums[1]);
}
int i=0;
// 这里定义初值,用于比较
int l=nums[0];
int s=fmax(nums[0],nums[1]); // 第一次动态规划,比较数组前两个元素
for(i=2;i<numsSize;i++) // 注意这里从 i+2 开始
{
int temp=s;
s=fmax(nums[i]+l,s); // 偷钱的最大值
l=temp; // l 始终作为动态规划中下 第二大 来存储,也就满足了隔一家偷钱的要求 和 后期超越的需求
}
return s;
}

京公网安备 11010502036488号