求极大子数组

设计思想
    判断前一个数是否为正,是正则加,是负则判断它加下一个数是否为正。若正则加,若负,则循环以上步骤,进行判断。
 
 
 
#include<iostream>
using namespace std;
int max(int a,int b)
{
    if(a>b)
    {
       return a;
    }
    else
    {
       return b;
    }
}
int maxsum(int a[], int n)
{
    int i;
    int maxsofar = 0;  //maxsofar记录到目前为止的的最大值
    int maxendinghere = 0; //maxendinghere记录从当前位置开始往前几个连续的数的和的最大值
    for (i = 0; i < n; i++)
    {
        maxendinghere = max(maxendinghere + a[i], 0);
        maxsofar = max(maxsofar, maxendinghere);
    }
    return maxsofar;
}
int main()
{
    int n, i=0;
    cout<<"请输入个数:";
    cin>>n;
    cout<<"请输入数组:";
    int a[100000]={0};
    for(i=0;i<n;i++) 
    {
        cin>>a[i];
    }
    int max=maxsum(a, n);
    cout << "最大子数组的和为:" << max << endl;
    return 0;
}

  

 

原文地址:https://www.cnblogs.com/4EY4EVER/p/9752259.html