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

LeetCode 53. 最大子序和

时间:2019-12-04 13:14:24      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:代码   bar   int   enter   body   一个   ret   math   ade   

最大子序列和

题目大意:

给一个数组,求出最大子序列和(连续数的和最大)

例子

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。




1、动态规划

如果按动态规划的做法,我们已知的条件:

  1. 前 n-1 个数最大的子序列和 ans
  2. num[n] 的值


我们还差一个条件:包括num[n-1]的连续值的最大值 sum

样例中前缀和(sum)的值

前缀和小于0则默认为0,最后面的值不会有任何帮助

0 0 0 4 -3 5 6 1 5



最终 ans = max(ans, sum + num[i]);

代码

复杂度:O(n)

class Solution {
    public int maxSubArray(int[] nums) {
        int len = nums.length;
        int sum = 0;  // 前缀和
        int ans = nums[0];  //最大值
        for(int i = 0; i < len; i++) {
            ans = Math.max(ans, sum + nums[i]);
            sum = sum + nums[i];
            if(sum < 0) sum = 0; 
        }
        return ans;
    }
}




LeetCode 53. 最大子序和

标签:代码   bar   int   enter   body   一个   ret   math   ade   

原文地址:https://www.cnblogs.com/smuzoey/p/11982206.html

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