zoukankan      html  css  js  c++  java
  • 剑指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;
        }
    
  • 相关阅读:
    蓝桥杯 全球变暖(dfs)
    Bzoj3196 Tyvj 1730 二逼平衡树
    Bzoj3110 [Zjoi2013]K大数查询
    Bzoj4004 [JLOI2015]装备购买
    Bzoj2115 [Wc2011] Xor
    Bzoj1257 [CQOI2007]余数之和sum
    HDU1724 Ellipse
    Bzoj2178 圆的面积并
    SPOJ CIRU The area of the union of circles
    CodeForces 232E.Quick Tortoise
  • 原文地址:https://www.cnblogs.com/JefferyChenXiao/p/12246457.html
Copyright © 2011-2022 走看看