最大子序列问题,递归和线性

/*************************************************************************
    > File Name: maxSumRec.cpp
    > Author:keson
    > Mail:[email protected]
    > Created Time: 2014年11月20日 星期四 17时51分23秒
 ************************************************************************/
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<ctime>
using namespace std;
const int SIZE=50000000;

int maxSumRec(const vector<int> &a,int left,int right)
{
    if (left==right)  //Base case
    {
        if (a[left]>0)
          return a[left];
        else
          return 0;
    }

    int center=(left+right)/2;
    int maxLeftSum=maxSumRec(a,left,center);
    int maxRightSum=maxSumRec(a,center+1,right);

    int maxLeftBorderSum=0,leftBorderSum=0;
    for(int i=center;i>=left;--i)
    {
        leftBorderSum+=a[i];
        if(leftBorderSum>maxLeftBorderSum)
           maxLeftBorderSum=leftBorderSum;
    }

    int maxRightBorderSum=0,rightBorderSum=0;
    for(int i=center+1;i<=right;++i)
    {
        rightBorderSum+=a[i];
        if(rightBorderSum>maxRightBorderSum)
           maxRightBorderSum=rightBorderSum;
    }
    return max(max(maxLeftSum,maxRightSum),maxLeftBorderSum+maxRightBorderSum);
}

int maxSubSum(const vector<int> &a)
{
    int maxSum=0,thisSum=0;
    for(int i=0;i<a.size();++i)
    {
        thisSum+=a[i];
        if (thisSum>maxSum)
          maxSum=thisSum;
        if(thisSum<=0)
          thisSum=0;
    }
    return maxSum;

}
int main()
{
    vector<int> vec={};
    for(int i=1;i<=SIZE;++i)
    {
        vec.push_back(rand()%100-50);
    }
    
   clock_t start_time=clock();
   cout<< maxSumRec(vec,0,vec.size()-1)<<endl;
   clock_t end_time=clock();
   cout<<"Running time is:"<<
   static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC<<" S"<<endl;

    clock_t start_time2=clock();
    cout<<maxSubSum(vec)<<endl;
    clock_t end_time2=clock();
    cout<<"Running time is: "<<
    static_cast<double>(end_time2-start_time2)/CLOCKS_PER_SEC<<" S"<<endl;

    return 0;

}



你可能感兴趣的:(最大子序列问题,递归和线性)