算法设计8-数列最大字段和问题

算法设计8-数列最大字段和问题

参考例题15,P143页

问题描述

问题

代码

#include<iostream>
using namespace std;
int max_sum3(int a[],int n);
int max_sub_sum(int a[],int left,int right)
{
    //s1=a[i]+...+a[n/2]  s2=a[n/2+1]+...+a[j]
    int center,i,j,sum,left_sum,right_sum,s1,s2,lefts,rights;
    if(left==right)
    {
        if(a[left-1]>0)//若第一个值为负数,则没必要算入,直接舍去(left是编号,应该用下标计算)
            return a[left-1];
        else
            return 0;
    }
    else
    {
        center=(left+right)/2;//中间的编号
        left_sum=max_sub_sum(a,left,center);
        //一开始一直进入函数直到left=center,即left=right,得到一个0后left=1,center=1,right=2再进入right_sum 
        right_sum=max_sub_sum(a,center+1,right);
        //right_sum的center+1=right一直成立
        s1=0;
        lefts=0;
        for(i=center;i>=left;i--)
        {
            lefts=lefts+a[i-1];//i是编号,应该用下标计算
            if(lefts>s1)
                s1=lefts;
        }
        s2=0;
        rights=0;
        for(i=center+1;i<=right;i++)
        {
            rights=rights+a[i-1];
            if(rights>s2)
                s2=rights;
        }
        if(s1+s2<left_sum&&right_sum<left_sum)
            return left_sum;
        if(s1+s2<right_sum)
            return right_sum;
        return s1+s2;
    }
}
int max_sum3(int a[],int n)
{
    return max_sub_sum(a,1,n);
}
int main()
{
    int n=6;
    int a[n]={-2,11,-4,13,-5,-2};
    cout<<max_sum3(a,n);
    return 0;
}


运行结果截图

结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值