剑指Offer对答如流系列 - 连续子数组的最大和

Posted jefferychenxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer对答如流系列 - 连续子数组的最大和相关的知识,希望对你有一定的参考价值。

面试题42:连续子数组的最大和

题目描述

输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整/数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。

问题分析

输入数组{1、-2、10、-4、7、2、-5}
技术图片

很容易看出从第一个数字开始累加,若走到某一个数字时,前面的累加和为负数,说明不能继续累加了。比如1 和 -2累加后值为-1,后面的数字加上-1反而变小了,应舍弃。要从接下来的数字重新开始累加。注意在累加过程中,将每次累加和的最大值记录下来,遍历完成后,返回该数字。

问题解答

  // 标识是否是无效输入
    boolean InvalidInput = false;
    public int FindGreatestSumOfSubArray(int[] array) {
        if(array==null || array.length<=0){
            InvalidInput = true;
            return 0;
        }
        InvalidInput = false;
        int sum=array[0];
        int maxSum=array[0];
        
        for(int i=1;i<array.length;i++){
            if(sum<0) {
                sum = array[i];
            } else {
                sum += array[i];
            }
            if(sum>maxSum) {
                maxSum=sum;
            }
        }
        return maxSum;
    }

以上是关于剑指Offer对答如流系列 - 连续子数组的最大和的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer对答如流系列 - 和为s的数字

写写代码系列013:剑指offer题目——连续子数组的最大和(动态规划)

剑指Offer对答如流系列 - 数组中的逆序对

剑指Offer对答如流系列 - 股票的最大利润

剑指 Offer 42. 连续子数组的最大和

剑指offer 连续子数组的最大和