【Java】 劍指offer(42) 連續子數組的最大和

本文參考自《劍指offer》一書,代碼採用Java語言。html

更多:《劍指Offer》Java實現合集  java

題目 

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

思路

  分析規律,從第一個數字開始累加,若走到某一個數字時,前面的累加和爲負數,說明不能繼續累加了,要從當前數字從新開始累加。在累加過程當中,將每次累加和的最大值記錄下來,遍歷完成後,返回該數字。post

 

測試算例 測試

  1.功能測試(輸入數組有正有負,全負數,全正數)url

  2.特殊輸入測試(null)htm

Java代碼

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

public class GreatestSumOfSubarrays {
    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;
    }
}

  

收穫

  1.複雜度要求爲O(n),考慮是否能夠從頭開始遍歷,找規律。blog

 

更多:《劍指Offer》Java實現合集  get

相關文章
相關標籤/搜索