求子数组的最大和并输出该子数组各成员

来源:互联网 发布:知产律师收入 编辑:程序博客网 时间:2024/05/21 22:49

题目:
输入一个整形数组,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值并输出该子数组成员。要求时间复杂度为O(n)。

#include <iostream>
using namespace std;

int Sum(int *a,int size,int *&result,int &count);

int main()
{
    const int N=8;
    int a[]={1,-2,3,10,-4,7,2,-5};
    int *result=new int[N];
    int sum=0;
    int count=0;
    memset(result,0,N);
   
    sum=Sum(a,N,result,count);
    cout<<"结果是:"<<sum<<endl;
    for(int i=0;i<=count;i++)
    {
        if(i==count)
            cout<<result[i]<<"="<<sum<<endl;
        else
            cout<<result[i]<<"+";
    }
    delete []result;
    system("pause");
    return 0;
}

int Sum(int *a,int size,int *&result,int &n)
{
    if(size<=0)
        return 0;
    int temp=a[0];
    int i=0,sum=0,count=0;
    for(i=1;i<size;i++)
    {
        if(temp<a[i])
        {
            temp=a[i];
        }
    }
    if(temp<=0)
    {
        result[0]=temp;
        return temp;
    }
    else
    {
        temp=0;
        for(i=0;i<size;i++)
        {
            if(temp<=0)
            {
                temp=a[i];
            }
            else
            {
                temp+=a[i];
            }
            if(temp>sum)
                sum=temp;
        }

        temp=0;
        for(i=0;i<size;i++)
        {
            if(temp<=0)
            {
                count=0;
                temp=a[i];
                memset(result,0,size);
                result[0]=a[i];
            }
            else
            {
                result[++count]=a[i];
                temp+=a[i];
                if(temp==sum)
                {
                    n=count;
                    break;
                }
            }
        }
    }
    return sum;
}

原创粉丝点击