#一个数组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)