对于数组 a:a 1 , a 2 , ... a k , ... a n ,当且仅当 a k-1 ≤ a k ≥ a k+1当 1 < k 且 k < n 时, a k是一个峰值。如果a 1 ≥ a 2,a 1是一个峰,如果a n-1 ≤ a n ,a n是一个峰。目标是从阵列中找到一个峰。
分治算法如下:
find_peak(a,low,high):
mid = (low+high)/2
if a[mid-1] <= a[mid] >= a[mid+1] return mid // this is a peak;
if a[mid] < a[mid-1]
return find_peak(a,low,mid-1) // a peak must exist in A[low..mid-1]
if a[mid] < a[mid+1]
return find_peak(a,mid+1,high) // a peak must exist in A[mid+1..high]
为什么这个算法是正确的?我认为它可能会因丢失存在峰值的阵列的一半而受到影响。