leetcode 198 动态规划
Posted 哈哈哈哈哈哈哈哈哈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 198 动态规划相关的知识,希望对你有一定的参考价值。
题目意思是:给一组数组,要使选取的子数组和(不用连续)最大,但不能同时选取相邻。
我的思路: 对于a[i]来说,要么选取,要么不选取。假设选取a[i],那么肯定不能选取a[i-1],只能看前0~i-2 中有没有能组成最大和的数。由此可以这样考虑 ,定义一个数组sum,sum[i]表示前i最大的和,
sum[i] = max{sum[i-2]+a[i],a[i-1]}
代码如下
int rob(int* nums, int numsSize) { int * sum = (int *)malloc(sizeof(int)*numsSize); sum[0] = nums[0]; sum[1] = nums[1]>nums[0]?nums[1]:nums[0]; for(int i =2;i<numsSize;i++) { if(nums[i]+sum[i-2]>sum[i-1]) sum[i] = nums[i]+sum[i-2]; else sum[i] = sum[i-1]; } return sum[numsSize-1]; }
以上是关于leetcode 198 动态规划的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 198 House Robber 动态规划
动态规划系列 Leetcode 198. House Robber