[size=large][color=blue][b]查找一个数组的最大子数组[/b][/color][/size]
[size=medium]如:
a=[13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]
最大子数组为[7,10],最大值为43[/size]
python代码如下
[size=medium]如:
a=[13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]
最大子数组为[7,10],最大值为43[/size]
python代码如下
def corss_mid(a,low,mid,high):
left_sum=-1000;
sum=0;
max_left=mid
for i in range(mid,low,-1):
sum+=a[i]
if sum>left_sum:
left_sum=sum
max_left=i
right_sum=-1000
sum=0
max_right=mid
for j in range(mid+1,high,1):
sum+=a[j]
if sum>right_sum:
right_sum=sum
max_right=j
return (max_left,max_right,left_sum+right_sum)
def find_max(a,low,high):
if high==low:
return (low,high,a[low])
else:
mid=(low+high)/2
(left_low,left_high,left_sum)=find_max(a,low,mid)
(right_low,right_high,right_sum)=find_max(a,mid+1,high)
(crose_low,cross_high,cross_sum)=corss_mid(a, low, mid, high)
if left_sum>=right_sum and left_sum>=cross_sum:
return (left_low,left_high,left_sum)
elif right_sum>=left_sum and right_sum>cross_sum:
return (right_low,right_high,right_sum)
else:
return (crose_low,cross_high,cross_sum)
a=[13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]
print find_max(a,0,15)