求一个数组的最大和子串
思路:
(1)用两个游标i,j同时从前往后扫描,用preSum和postSum记录两个方向的前n向和;
(2)用两个固定的位置pos1,pos2记录对应子串的范围,即(pos1,pos2);
(3)若preSum<0,则重新把preSum置为0,pos1等于那个比较大的负数的位置;
(4)若postSum<0,则重新把postSum置为0,post2等于那个比较大的负数的位置;
(5)循环终止条件为i>=j,此时(pos1,pos2)即为和最大的子串。
int GetMaxSumSubArray(int a[], int length1)
{
int i = 0;
int pos1 = 0;
int j = length1 - 1;
int pos2 = length1 - 1;
int preSum = 0;
int postSum = 0;
while (i < length1)
{
if (i >= j)
{
for (int i = 0; i <= pos1; ++i)
{
a[i] = 0;
}
for (int j = pos2; j < length1;++j)
{
a[j] = 0;
}
break;
}
preSum += a[i];
postSum += a[j];
if (preSum