连续最大和

Posted Kirl z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连续最大和相关的知识,希望对你有一定的参考价值。

【连续最大和】一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3.

解题思路:
动态规划,
子状态: 长度为1,2,3,…,n的子数组和的最大值 (局部元素构成的数组, 它的最大连续和)

F(i):以array[i]为末尾元素的子数组和的最大值

状态递推:
F(i) = max(F(i-1) + array[i],array[i])
F(i) = (F(i-1) > 0)? F(i-1) + array[i] : array[i]

初始值:F(0) = array[0]

返回结果:
maxsum:所有F(i)中的最大值
maxsum = max(maxsum,F(i))

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] arr = new int[n];
		while (scanner.hasNextInt()) {
			for (int i = 0; i < arr.length; i++) {
			arr[i] = scanner.nextInt();
		}
		int maxSum = arr[0];
		int maxNum = arr[0];
		for (int i = 1; i < arr.length; i++) {
			maxSum = max(arr[i], arr[i] + maxSum);
			if (maxNum < maxSum) {
				maxNum = maxSum;
			}
		}
		System.out.println(maxNum);
	}
}
// 判断大的数
private static int max(int a, int b) {
	if (a > b) {
		return a;
	}
	return b;
	}
}

以上是关于连续最大和的主要内容,如果未能解决你的问题,请参考以下文章

写写代码系列013:剑指offer题目——连续子数组的最大和(动态规划)

算法小总结最大连续子序列和最大连续子矩阵的关系与实现

求连续序列的最大子序列和

最大连续子序列问题(tyvj1305)

最大子阵列/连续数组的最大和

最大连续区间和问题