继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

一分钟算法题:计算最大子数组

小强聊架构
关注TA
已关注
手记 40
粉丝 9454
获赞 241

题目描述:

给定一个整数数组,查找连续的最大和的子数组(至少包含一个数字)并返回其和。

题目举例:

给定输入:[-2,1,-9,4,-1,2,1,-8,4]
输出: 6

题目分析:

因为是求最大连续的和,所以只需要遍历一次就行。
每遍历到一个数,计算下当前连续和的最大值。

例如:
i=0, 当前连续最大值为: -2
i=1, a[1] 大呢?还是a[0]+a[1]大?取大者
若a[1] 大,取从i=1开始计算子串
若a[0]+a[1] 大, 继续计算连续最大子串。
只需O(n) 遍历即可。

代码:

class Solution {
    public int maxSubArray(int[] nums) {
        int maxcurr = nums[0];
        int max = nums[0];
        
        for (int i=1;i<nums.length;i++){
            maxcurr  = Math.max(nums[i], maxcurr+nums[i]);
            max = Math.max(max, maxcurr);
        }
        
        return max;
    }
}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP