1. 程式人生 > >【劍指offer】連續子陣列最大和

【劍指offer】連續子陣列最大和

題目:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和為8(從第0個開始,到第3個為止)。給一個數組,返回它的最大連續子序列的和,你會不會被他忽悠住?(子向量的長度至少是1)

思路:動態規劃,對於陣列的前 i 個數的最最大和為F(i) = Max(F(i-1)+array[i], F(i-1))

 1 import java.util.ArrayList;
 2 public class Solution {
3 public int FindGreatestSumOfSubArray(int[] array) { 4 //用於記錄前i個數的最大和 5 ArrayList<Integer> candidateResults = new ArrayList<Integer>(); 6 int maxSum = 0; 7 for(int i=0; i<array.length;i++){ 8 int expectedSum = maxSum + array[i]; 9 //
如果當前的array[i]使得maxSum變大了(或者不變),就加上array[i] 10 //否則,以array[i]為起點重新計算maxSum 11 if(expectedSum>=array[i]){ 12 maxSum += array[i]; 13 }else{ 14 maxSum = array[i]; 15 } 16 candidateResults.add(maxSum); 17 }
18 int result = Integer.MIN_VALUE; 19 for(Integer num : candidateResults){ 20 if(result<num){ 21 result = num; 22 } 23 } 24 return result; 25 26 27 } 28 }