码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 198 动态规划

时间:2018-05-04 21:26:04      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:max   ssi   int   不用   动态   数组   sum   nbsp   题目   

题目意思是:给一组数组,要使选取的子数组和(不用连续)最大,但不能同时选取相邻。

我的思路: 对于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 动态规划

标签:max   ssi   int   不用   动态   数组   sum   nbsp   题目   

原文地址:https://www.cnblogs.com/jzcbest1016/p/8992321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!