本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
輸入一個整型數組,數組裏有正數也有負數。數組中一個或連續的多個整/數組成一個子數組。求全部子數組的和的最大值。要求時間複雜度爲O(n)。數組
分析規律,從第一個數字開始累加,若走到某一個數字時,前面的累加和爲負數,說明不能繼續累加了,要從當前數字從新開始累加。在累加過程當中,將每次累加和的最大值記錄下來,遍歷完成後,返回該數字。post
測試算例 測試
1.功能測試(輸入數組有正有負,全負數,全正數)url
2.特殊輸入測試(null)htm
//題目:輸入一個整型數組,數組裏有正數也有負數。數組中一個或連續的多個整 //數組成一個子數組。求全部子數組的和的最大值。要求時間複雜度爲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