最大連續子數組和

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

点赞