小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

求一个整数数组中的所有子数组的最大和

    今天,我们一起做一个题目,即求出一个整数数组中的所有子数组的最大和。

//求一个整数数组中的所有子数组的最大和
#include <stdlib.h>
#include <stdio.h>
int GetMaxChildArraySum(int * pInput, int nLen, int * pOut)
{
    if (!pInput || !pOut)
        return 0;
    if (nLen < 0)
        return 0;
    int nSum = 0;
    int nTempSum = 0;
    int nMax = pInput[0];
    int i = 0;
    for (i = 0; i < nLen; i++)
    {
        if (nTempSum <= 0)
        {
            //如果累加和小于等于0,则表示前面的子数组是拖累,甩掉它们。
            //从当下的元素重新计算子数组的开始位置。
            nTempSum = pInput[i];
        }
        else
        {
            nTempSum += pInput[i];
        }    
        if (pInput[i] > nMax)
        {
            nMax = pInput[i];
        }
        if (nTempSum > nSum)
        {
            nSum = nTempSum;
        }
    }
    if (nMax < 0)
    {
        //如果都是负数,则返回最大值。
        *pOut = nMax;
        return 1;
    }
    *pOut = nSum;        
    return 1;
}
void main()
{
    int Array[] = { 1, 2, 3, -10, -4, -7, -2, -5 };
    int nTemp = 0;
    GetMaxChildArraySum(Array, 8, &nTemp);
    printf("数组最大和:%d\n", nTemp);
    system("pause");
    return;
}
运行效果如下:

图1 运行效果

posted on 2014-09-14 14:56  牛栏山1  阅读(101)  评论(0编辑  收藏  举报

导航