/**
* @author wang
* @description
* 给定有可能负的整数 A1 A2 A3 ...An
* 求 Ai+...+Ak (即最大子序列和)的最大值 (0 =< i <= k <= n)
* 如果所有整数为负数,则最大子序列和为 0
*
* 关于这段代码的描述:
* 在求最大子序列和时,假设第x个数加到thisSum中,导致thisSum<=0
* 那么 x 之前的序列都可以放弃了,直接从 第x+1个整数开始重新计算thisSum.
* 当thisSum > maxSum时,更新maxSum的值。
*
* 这个算法在每一轮计算,都可以保证maxSum是 当前计算到的数组的最大子序列和。
*
* @create 2021/1/3
*/
public class 最大子序列和 {
public static void main(String[] args) {
int[] a = {4,-3,5,-2,-1,2,6,-2};
System.out.println(maxSubSum(a));
}
public static int maxSubSum(int a[]){
int maxSum = 0 ,thisSum = 0;
for (int i = 0; i < a.length; i++) {
thisSum += a[i];
if (thisSum > maxSum){
//将最大子序列和存入maxSum
maxSum=thisSum;
}
else if (thisSum < 0){
thisSum = 0;
}
}
return maxSum;
}
}