子数组的最大累加和

给定一个数组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;
	}

}

发布了33 篇原创文章 · 获赞 3 · 访问量 3799

猜你喜欢

转载自blog.csdn.net/qq_43169220/article/details/103074939
今日推荐