#打家劫舍#(一)
打家劫舍(一)
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; }