//连续字数组中的最大和
//分治法
int MaxArray(int num[],int left,int right)
{
int sum = 0;
if (left == right)
{
sum = num[left] > 0?num[left]:0;
}
int center = (left + right) / 2;
int leftsum = MaxArray(num, left, center);
int rightsum = MaxArray(num, center + 1, right);
int s1, lefts,i;
s1 = 0; lefts = 0;
for (i = center; i >= left; i--)
{
lefts += num[i];
if (lefts > s1)
s1 = lefts;
}
int s2, rights;
s2 = 0; rights = 0;
for (i = center + 1; i <= right; i++)
{
rights += num[i];
if (rights > s2)
s2 = rights;
}
int s;
s = s1 + s2;
if (leftsum > s)
{
sum = leftsum;
}
if (rightsum > s)
{
sum = right;
}
sum = s;
return sum;
}
void Maxarray(int num[], int n)
{
int sum ,b = 0;
sum = 0x80000000;
int first=0, end=0,temp=0,temp1=0;
if (num == NULL || n<0)
return;
for (int i = 0; i <= n; i++)
{
if (b > 0)
{
b += num[i];
temp = i;
}
else
{
b = num[i];
temp1 = i;
}
if (b > sum)
{
sum = b;
first = temp1;
end = temp;
}
}
cout << sum << " " << first << " " << end << " " << endl;
}
连续字数组中的最大和 分治法VS动态规划
最新推荐文章于 2020-11-22 15:46:57 发布