#打家劫舍#(一)

打家劫舍(一)

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;
}

全部评论

相关推荐

03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务