关于如何查找数组中和最大的子序列
问题:给定一个数组,如{-1,3,6,-9,2,-5,-1,9,3,-3},求该数组中的和最大的子序列。
返回子序列的起始元素和结束元素以及和。
思路:
1. 最大子序列的开始元素一定是正数
2. 最大子序列中任意一个元素开始往后累加到结束,这个和一定不会是负数
3. 从头开始累加,如果累加和小于0,那么抛弃这一段累加,从新开始累加,累加过程中如果累加和大于当前累加和最大值sum,则更新sum以及开始和结束位置。在重置累加时更新当前累加的起始位置,在更新sum值是同步更新起始和结束位置。
private static void division(int[] a) {
int sum = 0;
int n = a.length;
int b = 0;
int begin = 0, end = 0, curbegin = 0;
for(int i=0; i<n; i++) {
if (b>0) {
b = b + a[i];
} else {
b=a[i];
curbegin = i;
}
if(b>sum) {
sum = b;
begin = curbegin;
end = i;
}
}
System.out.println("开始:"+ begin + " 结束:" + end);
System.out.println("最大和为:" + sum);
}