求连续子数组的最大和C语言,求助:最长连续子数组问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

def findmid(a,left,right):

if(right==left):

besti=left

bestj=right

sum=a[left]

print("一个数",sum,besti,bestj)

return sum,besti,bestj

center=int((left+right)/2)

s1=0

lefts=0

s2=0

rights=0

cibest=0

cjbest=0

i=center

j=center+1

while(i>=left):

lefts+=a[i]

if(lefts>s1):

s1=lefts

cibest=i

i-=1

if(i==left):

cibest=i

j=center+1

while(j<=right):

rights+=a[j]

if(rights>s2):

s2=rights

cjbest=j

j+=1

if(j==right):

cjbest=j

crosssum=s1+s2

return crosssum,cibest,cjbest

def Maxsubsum(a,left,right):

sum=0

global count

if(right==left):

besti=left

bestj=right

sum=a[left]

print("一个数",sum,besti,bestj)

return sum,besti,bestj

else:

center=int((left+right)/2)

(crosssum,cibest,cjbest)=findmid(a,left,right)

(rightsum,ribest,rjbest)=Maxsubsum(a,center+1,right)

(leftsum,libest,ljbest)=Maxsubsum(a,left,center)

if(crosssum

sum=rightsum

print("在右",sum,ribest,rjbest)

return sum,ribest,rjbest

if(crosssum

sum=leftsum

print("在左",sum,libest,ljbest)

return sum,libest,ljbest

count+=1

sum=crosssum

print("在中间",sum,cibest,cjbest)

return sum,cibest,cjbest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值