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

原创 2016年08月31日 10:24:42

题目描述

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?

这实际上是一个逐步比较的过程,假设累加进行到某一步,继续累加下一个数的时候发现和变小了,就应该重新计算当前累加的和,这实际上就是一个重新赋值的过程。如果累加之后发现变大了,这当然是我们想要的,自然就继续累加了。累加之后再判断是否大于原来的最大值,如果不是的话,就重新赋值最大值为当前累加的和(因为它更大)。

package com.gpl.offer.jianzhi;

/**
 * Created by gpl on 2016/8/30.
 */
public class ArraySum {     //连续子数组的最大和

    public int findarray(int[] array){
        if(array == null || array.length == 0)
            return 0;
        int sum = 0;
        int curSum = 0;
        for(int i=0;i<array.length;i++){
            if(curSum<=0)
                curSum = array[i];
            else
                curSum += array[i];
            if(curSum > sum)
                sum = curSum;
        }
        return sum;
    }

    public static void main(String[] args){
        int[] array = new int[]{1,-2,3,10,-4,7,2,-5};
//        int[] array = {1,3,5,-6,9,10,-11,20};
        ArraySum as = new ArraySum();
        System.out.println(as.findarray(array));

    }
}


[LeetCode] Maximum Subarray 求连续子数组的最大和

声明:原题目转载自LeetCode,解答部分为原创 Problem :     Find the contiguous subarray within an array (co...
  • xblog_
  • xblog_
  • 2017年06月05日 21:52
  • 290

剑指offer之连续子数组的最大和(Python)

输入一个整形数组,有正数和负数,数组中的一个或连续多个整数组成一个子数组,O(n)时间求所有子数组的和的最大值...
  • u010636181
  • u010636181
  • 2017年11月02日 11:17
  • 182

连续子数组的最大和 动态规划实现

/* *copyright@nciaebupt 转载请注明出处 *问题:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 *求所有子数组的和的最大值。要求时间负责度为...
  • wuwuwuwuwuwuwuwu
  • wuwuwuwuwuwuwuwu
  • 2013年01月08日 16:51
  • 2570

Java编程----连续子数组的最大和

本篇博客的编程是关于数组的,数组在编程中有着举足轻重的地位,因为在Java中数组是直接存储在栈中的,所以操作起来很方便,效率非常高,数组也是面试中经常考察的一部分,关于数组的编程题目丰富多样,逻辑性很...
  • sd_lucky
  • sd_lucky
  • 2016年08月04日 23:09
  • 2553

剑指offer----连续子数组的最大和----java实现

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数...
  • snow_7
  • snow_7
  • 2016年07月17日 23:52
  • 652

剑指Offer面试题31(java版):连续子数组的最大和

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。要求时间复杂度为O(n) 例如输入的数组为{1,-2,3,1...
  • jsqfengbao
  • jsqfengbao
  • 2015年08月08日 21:42
  • 1385

LeetCode-连续子数组的最大和

Find the contiguous subarray within an array (containing at least one number) which has the largest ...
  • ivolcano
  • ivolcano
  • 2017年03月10日 14:41
  • 1195

【面试题之算法部分】最大和连续子数组

问题描述:给定一个数组A[0,1…n-1],求A的连续子数组,使该数组和最大 一. 暴力法 分析:首先初始化要求的最大值maxSum为A[0],然后定义三个索引i、j、k,然后三层循环:第一层i从0...
  • YoungLeoo
  • YoungLeoo
  • 2015年08月16日 08:29
  • 4464

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

1)      第一种方法 #include using namespace std; //为了区分是函数返回0还是输入不合法返回0设置一个变量判断 bool inputInvalid=false...
  • lom9357bye
  • lom9357bye
  • 2015年06月02日 12:00
  • 360

java求连续子数组的和最大

题目描述: 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 思路: ...
  • li_zhenxing
  • li_zhenxing
  • 2014年05月04日 10:19
  • 1512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【剑指offer】连续子数组的最大和
举报原因:
原因补充:

(最多只允许输入30个字)