一.抽象:
给定一个数组,求出数组中两数之差的最大值,被减数下标大于减数
二.方法:
1.分治法:
a.将数组分成左右两部分
b.分别求出两部分的最大值,最小值,以及下标大的数与下标小的数之差的最大值。
c.合并两部分的结果
时间为O(nlogn)
2.转化为最大子数组和问题:
a.先求出数组的前一个数与后一个数之差,组成新的数组
b.求新数组的最大子数组和
(原理:假设原数组(长度为n)为l[0…n-1],新数组为d[0…n-2],其中d[i]=l[i+1]-l[i],当求出d的最大子数组为d[x…y]时,则有:
l[x+1]-l[x] + l[x+2]-l[x+1] … l[y+1]-l[y] = l[y+1]-l[x]
也就求得原数组两数之差的最大值)
时间为O(n)
三.代码(python ):
1.分治法:
def get_max_diff_partition(l,start,end)
mid=int((start+