劍指Offer對答如流系列 - 連續子數組的最大和

面試題42:連續子數組的最大和

一、題目描述

輸入一個整型數組,數組裏有正數也有負數。數組中一個或連續的多個整/數組成一個子數組。求所有子數組的和的最大值。要求時間複雜度爲O(n)。

二、問題分析

輸入數組{1、-2、10、-4、7、2、-5}
在這裏插入圖片描述
很容易看出從第一個數字開始累加,若走到某一個數字時,前面的累加和爲負數,說明不能繼續累加了。比如1 和 -2累加後值爲-1,後面的數字加上-1反而變小了,應捨棄。要從接下來的數字重新開始累加。注意在累加過程中,將每次累加和的最大值記錄下來,遍歷完成後,返回該數字。

三、問題解答

  // 標識是否是無效輸入
    boolean InvalidInput = false;
    public int FindGreatestSumOfSubArray(int[] array) {
        if(array==null || array.length<=0){
            InvalidInput = true;
            return 0;
        }
        InvalidInput = false;
        int sum=array[0];
        int maxSum=array[0];
        
        for(int i=1;i<array.length;i++){
            if(sum<0) {
                sum = array[i];
            } else {
                sum += array[i];
            }
            if(sum>maxSum) {
                maxSum=sum;
            }
        }
        return maxSum;
    }
發佈了194 篇原創文章 · 獲贊 3472 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章