连续最大和
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;
}
}
以上是关于连续最大和的主要内容,如果未能解决你的问题,请参考以下文章