本篇部落格的編程是關於數組的,數組在編程中有著舉足輕重的地位,因為在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
這道編程題能不錯的考察程式員的能力,如果能夠編寫出來,說明編程能力還是不錯的,編程能力能夠通過練習得到提高的,希望再接再厲。