查找最大子数组

[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代码如下



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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值