连续最大和

本文介绍了如何使用动态规划解决数组中最大连续子数组和的问题,通过定义子状态F(i)并进行状态递推,展示了如何在Java代码中实现。关键步骤包括初始化F(0)和计算F(i)的两种情况。实例分析了数组[-1, 2, 1]的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【连续最大和】一个数组有 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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值