面試題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;
}