//求连续区间的最大和。时间复杂度:O(N^3)constint MIN = numeric_limits<int>::min();
int inefficientMaxSum(constvector<int>& A)
{
int N = A.size,ret = MIN;
for(int i = 0;i < N;i++)
for(int j = i;j < N;j++)
{
int sum = 0;
for(int k = i;k <= j;k++)
sum += A[k];
ret = max(ret,sum);
}
return ret;
}
//求连续区间的最大和。时间复杂度:O(N^2)constint MIN = numeric_limits<int>::min();
int betterMaxSum(constvector<int>& A)
{
int N = A.size,ret = MIN;
for(int i = 0;i < N;i++)
{
int sum = 0;
for(int j = i;j < N;j++)
{
int sum = 0;
sum += A[j];
ret = max(ret,sum);
}
}
return ret;
}
//求连续区间A[lo..hi]的最大和。时间复杂度:O(nlogn)constint MIN = numeric_limits<int>::min();
int fastMaxSum(constvector<int>& A,int lo,int hi)
{
if(lo == hi)
return A[lo];
int mid = (lo + hi) / 2;
int left = MIN,right = MIN,sum = 0;
for(int i = mid;i >= lo;i--)
{
sum += A[i];
left = max(left,sum);
}
sum = 0;
for(int j = mid + 1;j <= hi;j++)
{
sum += A[j];
right = max(right,sum);
}
int single = max(fastMaxSum(A,lo,mid),fastMaxSum(A,mid + 1,hi));
return max(left + right,single);
}
//求连续区间的最大和。时间复杂度:O(N^3)const int MIN = numeric_limits<int>::min();int inefficientMaxSum(const vector<int>& A){ int N = A.size,ret = MIN; for(int i = 0;i < N;i++) for(int j = i;j < N