输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值,要求时间复杂度为O(n)。
例如数组是{ 1, -2, 3, 10, -4, 7, 2, -5 },则最大的连续子数组为3, 10, -4, 7, 2, 因此输出值为18(3+10-4+7+2)。
public void MaxSubArray(){
int[] a = {1, -2, 3, 10, -4, 7, 2, -5};
int curSum = 0, maxSum = 0;
for(int i=0; i<a.length; i++){
curSum += a[i];
if(curSum < 0){
curSum = 0;
}
if(curSum > maxSum){
maxSum = curSum;
}
}
System.out.println("maxSum = " + maxSum);
}
以下是输出结果:
maxSum = 18