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

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

//求一个整数数组中的所有子数组的最大和
#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 运行效果

转载于:https://www.cnblogs.com/new0801/p/6176938.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值