最大子数组之和

考虑:加上一个负数,和就会变小。

int MaxarySum(int a[], int Len)
{
    int MaxSum = 0;   //保存最大值
    int CurSum = 0;   
    int HeadIndex = 0;
    int EndIndex = 0;

    int i;
    for (i = 0; i < Len; i++)
    {
        CurSum = CurSum + a[i];

        if (CurSum > MaxSum)
        {
            MaxSum = CurSum; //大于MaxSum则更新MaxSum
            EndIndex = i;
        }
        if (CurSum < 0)
        {
            CurSum = 0;   //如果为负数,则丢弃重新计和
              HeadIndex = i+1; 
        }
    }
    if (MaxSum == 0)
    {
        MaxSum = a[0];
        for (i = 1; i < Len; i++)
        {
            if (a[i] > MaxSum)
            {
                MaxSum = a[i];
                HeadIndex = EndIndex = i;
            }
        }
    }
    printf("the HeadIndex is %d, EndIndex is %d\n",HeadIndex,EndIndex);
    return MaxSum;
}

 

参考自:http://www.cnblogs.com/mixer/archive/2011/12/22/2447982.html

posted @ 2013-09-28 21:33  dingsd  阅读(193)  评论(0)    收藏  举报