求数组中连续最大的和

/**********************************
    求数组中连续字串的最大和
    并返回起始位置和终止位置
***********************************/
#include <stdio.h>
#define elemType int

elemType max(elemType a,elemType b) {
    if(a>b) return a;
    return b;
}

elemType maxSumOfContinueSubStr(elemType *a,int length) {
    if(a == NULL || length <= 0)
        return 0;
    int maxSum=0,sumOfEnd=0;
    int leftIndex=0,rightIndex=-1;
    for(int i=0;i<length;i++) {
        sumOfEnd = max(0,sumOfEnd+a[i]);
        if(sumOfEnd == 0) leftIndex = i+1+1; //下一个位置开始

        maxSum = max(maxSum,sumOfEnd);
        if(maxSum == sumOfEnd) rightIndex = i+1;   //当前位置
    }

    printf("from: %d to %d",leftIndex,rightIndex);
    return maxSum;
}

void main() {
    elemType a[11] = {-3,2,-1,2,-4,5,6,4,-9,1,2};
    elemType sum = maxSumOfContinueSubStr(a,10);
    printf("max sum of continue sub str is:%d\n",sum);
}

 

转载于:https://www.cnblogs.com/ToBeConfidence/articles/3808705.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值