434
社区成员
发帖
与我相关
我的任务
分享
maxsum(int l,int r)
if l=r then return a[l]
mid<-(l+r)/2
lsum<-maxsum(l,mid)
rsum<-maxsum(mid+1,r)
sum1<-a[mid]
sum2<-a[mid+1]
sum<-sum1+sum2
if lsum>sum then sum<-lsum
if rsum>sum then sum<-rsum
return sum
拆分子数组分别求得的最大子段和为sum1,sum2。时间复杂度为2T(N/2),从中心点向两边找最大的和,找到跨越的最大子段和的时间复杂度为O(n), 所以总体的时间复杂度为:T(n)=2T(n/2)+O(n) = O(nlogn)。
分治法的步骤:分解为子问题→求解子问题→合并子问题
在我们的生活中,如果遇到了很困难的问题,那我们不妨把它们拆分出来,然后逐一击破,就不会那么困难了。