Java基礎面試題——(4)

題目:輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值。要求時間複雜度爲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的情況,容易遺漏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章