給定一組整數序列,找出連續子序列的最大和。只需回傳最大和,不需回傳子序列本身。
-2, 11, -4, 13, -5, -2 → 最大子序列和為 20(11 + -4 + 13)-6, 2, 4, -7, 5, 3, 2, -1, 6, -9, 10, -2 → 最大和為 16核心思想:遍歷陣列,維護「以當前元素結尾的最大子序列和」(thisSum)與「全域最大和」(maxSum)。若 thisSum 變為負數,歸零重新累加,因為負數只會拖累後續總和。
public static int maxSubSum(int[] a) {
int maxSum = a[0];
int thisSum = 0;
for (int j = 0; j < a.length; j++) {
thisSum += a[j];
if (thisSum > maxSum) {
maxSum = thisSum;
} else if (thisSum < 0) {
thisSum = 0;
}
}
return maxSum;
}
若需同時輸出子序列的起始與結束索引,可在更新 maxSum 時記錄位置;若允許空子序列(和為 0),需將 maxSum 初始化為 0 並調整邏輯。