给定一个数组arr,返回子数组的最大累加和
例:arr = {1,-2,3,5,-2,6,-1}
子数组{3,5,-2,6}可以累加出最大值12
基本思路
从数组的第一个元素往后加,如果和为负数就舍弃,从一个新的元素开始往后加,当前和比最大和大则更新最大和的值(具体看代码)
代码
/*
* 给定一个数组arr,返回子数组的最大累加和
* 例:arr = {1,-2,3,5,-2,6,-1}
* 子数组{3,5,-2,6}可以累加出最大值12
*/
public class 子数组最大累加和 {
public static void main(String[] args) {
int[] array = {1,-2,3,5,-2,6,-1,3,8};
System.out.println(maxSum(array));
}
public static int maxSum(int[] array) {
int left = 0;//左指针
int right = 1;//右指针
int temp = 0;//记录最大值更新时右指针的位置
int sum = array[left];
int maxSum = array[left];
while(left < array.length && right < array.length) {
if(sum >0) { //和大于0继续向后加
sum = sum + array[right];
if(sum > maxSum) {
maxSum = sum;
temp = right;
}
right++;
}
else { //和小于0则说明前面的元素不能构成最大累加和,舍去,从新元素开始累加
sum = array[right];
if(sum > maxSum)
maxSum = sum;
left = right;
right++;
}
}
for(int i = left; i <= temp; i++)
System.out.print(array[i] + " ");
System.out.println();
return maxSum;
}
}