1. 程式人生 > >Java程式設計----連續子陣列的最大和

Java程式設計----連續子陣列的最大和

本篇部落格的程式設計是關於陣列的,陣列在程式設計中有著舉足輕重的地位,因為在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

這道程式設計題能不錯的考察程式設計師的能力,如果能夠編寫出來,說明程式設計能力還是不錯的,程式設計能力能夠通過練習得到提高的,希望再接再厲!