434
社区成员
发帖
与我相关
我的任务
分享int maxmerge(int a[], int left, int right)
{
int mid = (left+right)/2;
int s1,s2,sum=0,max=-10000;
if(left == right) return a[left];
s1 = maxmerge(a,left,mid);
s2 = maxmerge(a,mid+1,right);
for(int i=mid;i>=0;i--)
{
sum += a[i];
if(sum > max) max = sum;
}
sum = max;
for(int i=mid+1;i<=right;i++)
{
sum += a[i];
if(sum > max) max = sum;
}
if(max<s1) max = s1;
else if(max<s2) max = s2;
return max;
}
时间复杂度
分解子问题:O(1)
求解子问题:2T(n/2)
合并子问题:O(n)
故时间复杂度为T(n)=2T(n/2)+O(n)=nlogn
对分治法的思考