分治法求最大连续和的问题

分治法求最大连续和

题目

给出一个长为n的序列,求最大连续和

解析

对整个序列进行对半拆分,发现其就只有两种情况,第一种是最大序列完全在左半边或者右半边,第二种情况是左右半边都有,由此我们可以写出代码。

//a stands for the input array,d stands for the lower bound,h snads for the higher bound
int maxsum(int *a,int d,int h)
{
	int temp, l, r, tmax;
	if (h - d == 1)
		return a[d];
	int m = (d + h) / 2;//confirm m is not greater than the real middle number
	tmax = max(maxsum(a, d, m), maxsum(a, m, h));
	temp = 0;
	l = a[m - 1];
	for (int i = m - 1; i >= d; i++)
		l = max(l, temp += a[i]);
	temp = 0;
	r = a[m];
	for (int i = m; i < h; i++)
		r = max(temp += a[i], l);
	return max(tmax, l + r);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值