题目描述
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
题目链接
解题思路
首先我们的正常思维是啥,用一个变量来存放累加和,要是加到下一个数字时,小于前面的和了,那就不要这个数字了,但是,要是后面连续几个数字加起来比前面的大呢,或者小呢,是不是我们还需要一个变量来存放后面的累加:
这个思想就是,先累加一部分,遇到累加和都小于前面的了,先不往前面的值上继续累加了,置为零,转而累加后面的,要是比前面的大,就替换前面累加的和,然后依次类推,直到找到最大和。
代码示例
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int max = array[0];
int num =0;
for(int i =0;i<array.length;i++){
num+=array[i];
if(num>max){
max = num;
}
if(num<0){
num=0;
}
}
return max;
}
}