1. 題目
有一個數組,如-2, 3, 6, 2, -4, 15, -8,查找其中最大子序列和。在本例中,最大值爲3+6+2+-4+15=22,假設數組中必有正數.
2.思路
- 假設我們已知結果,和爲最大的最大子序列爲i到j之間
- 可以將i-1做爲分界點,即該點之前的子序列和爲負數,因爲若該子序列不爲負數則可於後續序列相加,與假設相悖
- 由思路1和2可進行操作:從數組由左至右相加,若爲負數則可理解爲到了分界點,不做計入,在分界點之後繼續開始計算
3.上代碼
package com.coline.algorithm.subarray;
public class MaxSumSubArray {
static int maxSumSubArray(int[] array) {
int maxSum = 0;
int currentSum = 0;
for (int value : array) {
currentSum += value;
if (currentSum < 0) {
currentSum = 0;
} else {
if (currentSum > maxSum) {
maxSum = currentSum;
}
}
}
return maxSum;
}
public static void main(String[] arg0) {
int[] array = {-2, 3, 6, 2, -4, 15, -8};
System.out.println(maxSumSubArray(array));
}
}