最大子串和问题(C语言实现)(机试常考,面试常考!!!)

最大子串和问题

最大子串和有个比较巧妙的解决办法

代码

int MaxSubseqSum4(int A[], int N)
{
    int ThisSum=0, MaxSum =0;
    int i;
    for(i = 0; i < N; i++)
    {
        ThisSum += A[i];      /* 向右累加 */
        if(ThisSum>MaxSum)
            MaxSum = ThisSum; /* 发现更大和则更新当前结果 */
        else if(ThisSum<0)    /* 如果当前子列和为负 */
            ThisSum = 0;      /* 则不可能使后面的部分和增大,抛弃 */
    }
    return MaxSum;
}

思想

先遍历,从前到后
用ThisSum记录当前的累加情况,MaxSum记录最大的子串和
在遍历的过程中会累加
最重要的部分就是条件判断部分

  1. 当发现当前记录的累加情况比MaxSum记录的情况要大,那就更新MaxSum的值
  2. 如果发现某时刻的子列和为负,则舍弃当前记录的累加情况,因为这部分不可能使得后面的部分增大
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值