題目:輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值。要求時間複雜度爲O(n)。例如:輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,因此輸出爲該子數組的和18。
代碼實現:
public class JavaInterview_4 {
public static int getMaxSequence(int [] arr){
int max = 0;
int temp = 0;
for(int i = 0; i <= arr.length - 1; i++){
temp += arr[i];
if(temp < 0){
temp = 0;
}
if(temp > max){
max = temp;
}
}
if(max == 0){
max = arr[0];
for(int i = 1; i <= arr.length - 1; i++){
if(arr[i] > max){
max = arr[i];
}
}
}
return max;
}
public static void main(String[] args) {
int [] arr = new int[]{1, -2, 3, 10, -4, 7, 2, -5};
System.out.println(JavaInterview_4.getMaxSequence(arr));
}
}
運行效果:
PS:注意判斷max==0的情況,容易遺漏。