輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。 求所有子數組的和的最大值,要求時間複雜度爲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