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));
}
}