剑指offer系列之29:连续子数组的最大和

题目描述:输入一个整型数组,数组中一个或连续多个整数组成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n)。

思路:举例分析数组的规律,这实际上是一个逐步比较的过程,假设累加进行到某一步,继续累加下一个数的时候发现和变小了,就应该重新计算当前累加的和,这实际上就是一个重新赋值的过程。如果累加之后发现变大了,这当然是我们想要的,自然就继续累加了。累加之后再判断是否大于原来的最大值,如果不是的话,就重新赋值最大值为当前累加的和(因为它更大)。其实还可以使用动态规划的思想。

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        boolean invalidInput = false;
        if(array == null || array.length == 0){
            invalidInput = true;
            return 0;
        }
        invalidInput = false;
        int nCurSum = 0;
        int nGreatestSum = 0x80000000;
        for(int i = 0;i < array.length;i++){
            if(nCurSum <= 0){
                nCurSum = array[i];
            }else{
                nCurSum += array[i];
            }
            if(nCurSum > nGreatestSum){
                nGreatestSum = nCurSum;
            }
        }
        return nGreatestSum;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值