#include <iostream>
#include <string>
using namespace std;
struct SubArray
{
int startIndex;
int endIndex;
int sum;
};
struct SubArray FindMaxmumSubarray(int a[], int low, int high) //返回一个下标元组划定跨越中点的最大子数组的边界
{
int sum = 0, lmax = -INFINITY, maxl; //lmax左最大子数组值,maxl左最大子数组边界下标
int mid = (low + high) / 2;
for (int i = mid; i > 0; i--)
{
sum += a[i];
if (sum > lmax)
{
lmax = sum;
maxl = i;
}
}
sum = 0;
int rmax = -INFINITY, maxr; //rmax右最大子数组值,maxr右最大子数组边界下标
for (int j = mid + 1; j < high; j++)
{
sum += a[j];
if (sum > rmax)
{
rmax = sum;
maxr = j;
}
}
SubArray subarray3;
subarray3.startIndex = maxl;
subarray3.endIndex = maxr;
subarray3.sum = lmax + rmax;
return subarray3;
}
struct SubArray FindMaxCrossingSubarray(int a[], int low, int high)
{
int mid;
if (high == low)
{
SubArray subarray;
subarray.
最大子数组问题 分治法C++版
最新推荐文章于 2022-11-12 12:25:53 发布