#打家劫舍#(一)
打家劫舍(一)
https://www.nowcoder.com/practice/c5fbf7325fbd4c0ea3d0c3ea6bc6cc79?tpId=295&tqId=2285793&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
// 动态规划出最大值和第二大的值,并不断更新最大值
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;
}
