Java程式設計----連續子陣列的最大和
阿新 • • 發佈:2019-02-16
本篇部落格的程式設計是關於陣列的,陣列在程式設計中有著舉足輕重的地位,因為在Java中陣列是直接儲存在棧中的,所以操作起來很方便,效率非常高,陣列也是面試中經常考察的一部分,關於陣列的程式設計題目豐富多樣,邏輯性很強,希望大家多加練習,提高自己解決問題的能力。
題目描述:在一維陣列中,求出連續子陣列的最大和。如果陣列中全是整數,那麼最大和為所有元素之和,那麼存在負數呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和為8(從第0個開始,到第3個為止)。
題目要求: 時間限制:1秒 空間限制:32768K
解題思路:
1. 首先,我們需要定義一個變數currentSum,用for迴圈來記錄前i項的和,currentSum每次都會更改,如果currentSum的值小於0,我們再往後加只有減小最大和,所以我們需要將array[i+1]項的值重新賦值給currentSum。
2. 我們需要定義一個最大值max,每次改變currentSum的值時,我們都需要將max和currentSum進行比較,如果currentSum大於max,我們則將currentSum的值賦值給max。
實現程式碼:
public class TestArray {
public static int FindGreatestSumOfSubArray(int[] array) {
if (array.length==0 || array==null) {
return 0;
}
int currentSum = 0; //儲存當前連續n項的和
int max = 0; //儲存連續子元素和的最大值
for (int i = 0; i < array.length; i++) {
//核心部分,好好理解.
if(currentSum<=0){ //如過當前連續n項的和小於等於0,則沒必要與後面的元素相加
currentSum = array[i]; //currentSum重新賦值
}else{
currentSum += array[i]; //如果currentSum的值大於0,則繼續與後面的元素相加,
}
if(currentSum>max){ //每次改變currentSum的值都有與max進行比較
max = currentSum; //如果currentSum的值大於max,則將currentSum的值賦值給max
}
}
return max;
}
}
程式碼測試:
public static void main(String[] args) {
int[] array = {6,-3,-2,7,-15,1,2,2};
int result = FindGreatestSumOfSubArray(array);
System.out.println("連續子元素的最大和為:"+result);
}
連續子元素的最大和為:8
這道程式設計題能不錯的考察程式設計師的能力,如果能夠編寫出來,說明程式設計能力還是不錯的,程式設計能力能夠通過練習得到提高的,希望再接再厲!