赞
踩
给定一个数组a[0...n-1],求a[j]-a[i]+a[q]-a[p]的最大值,其中i<j<p<q
- #一个数组a[0...n-1],求a[j]-a[i]+a[q]-a[p]的最大值,其中i<j<p<q
- #算法解析:借鉴a[j]-a[i]的最大值,先把数组分为两段,每一段按单独算法执行,也就是先把该段
- #前面一截的最小值找出,后面一截的最大值找出。然后算出最大值,同理算出第二段最大值,相加得赋值为
- #max,如果更大则替换。
- def getmax(array):
- arrlen=len(array)-1
- arraymax = [-100000] #这里赋初值时要尽可能的小,以防max-min是小于0的一些数而导致没记录。
- for i in range(1,arrlen+1):
- prearray=array[:i]
- endarray=array[i:]
- prelen=len(prearray)
- endlen=len(endarray)
- #每次重新循环时都会被初始化,必须在for循环外部加一个存储空间,防止最大值被初始化。
- min = prearray[0]
- max = endarray[0]
- if max-min>arraymax[0]:
- arraymax[0]=max-min
- for i in range(prelen):
- if array[i]<min:
- min=array[i]
- for i in range(endlen):
- if array[i]>max:
- max=array[i]
- return arraymax[0]
- if __name__ == '__main__':
- array=[1,2,3,9,6,4,2,1]
- slen=len(array)-2
- max1 = 0
- max2 = 0
- totalmax = max1 + max2
- for i in range(2,slen+1):
- array1=array[0:i]
- array2=array[i:]
- max1=getmax(array1)
- max2=getmax(array2)
- totalmax = max1+max2
- if max1+max2>totalmax:
- totalmax=max1+max2
- print(totalmax)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。