0
点赞
收藏
分享

微信扫一扫

(C++)分而治之求最大子列和代码

夜空一星 2022-03-14 阅读 69
c++

 自定义了一个数组,测试了一下。。

函数可以直接用。。

新人小白首发。。(其实也就是看完别人的代码自己闭眼写了一下)

#include <iostream>
int Max3(int a, int b, int c)
{
	return (a > b) ? (a > c) ? a : c : (b > c) ? b : c;
}
int Divideandconque(int a[],int left,int right)
{
	int mid = (left + right) / 2;
	if (left == right)
	{
		if (a[left] > 0)
		{
			return a[left];
		}
		return 0;
	}
	int Maxleftsum = Divideandconque(a, left, mid);
	int Maxrightsum = Divideandconque(a, mid + 1, right);
	int Maxleftbordersum = 0;
	int Maxrightbordersum = 0;
	int sum = 0;
	int i;
	for (i = mid; i >= left; i--)
	{
		sum += a[i];
		if (Maxleftbordersum < sum)Maxleftbordersum = sum;
	}
	sum = 0;
	for (i = mid+1; i <= right; i++)
	{
		sum += a[i];
		if (Maxrightbordersum < sum)Maxrightbordersum = sum;
	}
	return Max3(Maxleftsum, Maxrightsum, Maxleftbordersum + Maxrightbordersum);
}
int main()
{
	int n[] = { 2,-1,5,7,-3,4,-6,9,1 };
	int a=Divideandconque(n, 0, 8);
	std::cout << a << std::endl;
}
举报

相关推荐

0 条评论