C++,求最大字段和

本文讨论了如何使用动态规划方法求解最大字段和问题,指出其低空间复杂度和线性时间复杂度优势,并提供了C++代码示例。作者邀请读者提出改进意见。
摘要由CSDN通过智能技术生成

        我经过今天写题和观察他人的解法,觉得最大字段和的求法用动态规划来写,是很好的。

他的空间复杂度很低,时间复杂度是O(n)。

        

        发博客,以提高学习理解

        有不妥的地方,各路大神可指出

#include <iostream>

using namespace std;

int main()
{
	int n;
	int a;//这个是用于输入数字的,不需要用数组的,因为这个方法用不到数组
	cin >> n;//自己要输入多少个数字

	int s = 0, amm = 0;//s用于动态规划,amm用于得出当前最大字段和

	for (int i = 1; i <= n; i++)//这可以输入n个数字了
	{
		cin >> a;//输入
		s += a;//把a刚输入的a加进去

		//
		if (s < 0)s = 0;
		amm = max(s, amm);
		//amm能记录当前为止,字段中的最大值,而字段是由“if (s < 0)s = 0;”划出来的
		//在这里,随着s的变化,若s<0,则说明在这个点时,前面的数
		//相加是小于零的,这时候,让s初始化变为0,下面的amm与s比较自然是
		//amm胜出,如此一来,相当于跳过了这个点。

		//例如:
		// 输入: 5
		//		  1 2 -4 -4 4
		//  s:   1 2 0  0  4
		// 所以 amm就是4了
		//		
		// 输入: 4
		//        1 -2 4 -3
		//    s: 1 0  4  1
		// 所以 amm就是4了
	}

	cout << amm;

	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值