題目:輸入一個整型數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。要求時間複雜度爲O(n)。
例如,輸入的數組爲{1, -2, 3, 10, -4, 7, 2, -5},和最大的子數組爲{3, 10, -4, 7, 2},因此輸出爲該子數組的和18。
思路:動態規劃,通過遍歷逐個累加和比對找尋最大連續子組
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if(array==null||array.length<=0)return 0;
int max = Integer.MIN_VALUE;
int sum = 0;
for(int value:array){
if(sum<=0){ // 不管首個數字還是累加值小於0時都重新賦值,因爲數組中肯定存在正整數,如果出現極端情況(只有一個正整數)我們指針必須指向這個唯一的正整數
sum = value;
}else{
sum+=value;
}
if(max<sum){
max = sum;
}
}
return max;
}
}
時間複雜度:O(n)
空間複雜度:O(1)