//最大子序列和问题Maximum Subsequence Sum
#include <iostream>
#include<vector>
using namespace std;//使用命名空间
/*************T(N)=O(N^3) Cubic************/
int maxSubSum1(const vector<int> &a){
int maxSum=0;
for(int i=0;i<a.size();i++)
for(int j=i;j<a.size();j++){
int thisSum=0;
for(int k=i;k<=j;++k)thisSum+=a[k];
if(thisSum>maxSum)maxSum=thisSum;
}
return maxSum;
}
/*************T(N)=O(N^2) Quadratic************/
int maxSubSum2(const vector<int> &a){
int maxSum=0;
for(int i=0;i<a.size();i++){
int thisSum=0;
for(int j=i;j<a.size();j++){
thisSum+=a[j];
if(thisSum>maxSum)maxSum=thisSum;
}
}
return maxSum;
}
/*************T(N)=O(NlogN) Driver for divide-and-conquer************/
int maxSubSum3(const vector<int> &a){
// return maxSumRec(a,0,a.size()-1);
}
/*************T(N)=O(N) Linear-time************/
int maxSubSum4(const vector<int> &a){
int maxSum=0,thisSum=0;
for(int j=0;j<a.size();j++){
thisSum+=a[j];
if(thisSum>maxSum)maxSum=thisSum;
else if(thisSum<0)thisSum=0;
}
return maxSum;
}
int main(){
vector<int> b;
b.push_back(-2);b.push_back(11);b.push_back(-4);b.push_back(13);b.push_back(-5);b.push_back(-2);
//b[]={-2,11,-4,13,-5,-2};
//b[0]=-2;b[1]=11;b[2]=-4;b[3]=13;b[4]=-5;b[5]=-2;
cout<<maxSubSum1(b)<<endl;
cout<<maxSubSum2(b)<<endl;
//cout<<maxSubSum3(b)<<endl;
cout<<maxSubSum4(b)<<endl;
return 0;
}
最大子序列和问题
最新推荐文章于 2022-05-01 01:00:00 发布