1. 程式人生 > >求最大連續子陣列和的最大值

求最大連續子陣列和的最大值

題目描述:給定一個數組A[0,....,n-1],求A的連續子陣列,使得該子陣列的和最大。

eg:  1,-2,3,10,-4,7,2,-5的最大子陣列為3,10,-4,7,2

演算法分析:

記S[i]為以A[i]結尾的陣列中和最大的子陣列,則S[i+1]=max(S[i]+A[i+1],A[i+1])

S[0] = A[0]

遍歷i:0<=i<=n-1

public static void main(String[] args) {
   int[] array = new int[8];
array[0] = -1;
array[1] = -2;
array[2] = 3;
array[3] = 10;
array[4] = -4; array[5] = 7; array[6] = 2; array[7] = -5; maxSubArray(array); } public static void maxSubArray(int[] array){ int max = 0; int sum = array[0]; int firstIndex = 0; int lastIndex = 0; for(int i = 1;i<array.length;i++){ if(sum > 0){ sum += array[i];
}else{ sum = array[i]; firstIndex = i; } if(max < sum){ max = sum; lastIndex = i; } max = max>sum ? max : sum; } System.out.println("當前陣列中連續子陣列和最大為:" + max); for(int k = firstIndex;k<=lastIndex;k++){ System.out.println(k); } }