给定n
个整数,排成一行,显示一个可以找到一个峰值的有效算法。峰值是一个不小于它旁边两个数字的数字(或者它旁边的一个数字,如果它在该行的末尾。)
答案 0 :(得分:3)
存在O(log n)
算法。我们使用分而治之。
find_peak(lo,hi):
mid = (lo+hi)/2
if A[mid] >= A[mid-1], A[mid+1] return mid
if A[mid] < A[mid-1]
return find_peak(lo,mid-1) // a peak must exists in A[1..mid-1]
if A[mid] < A[mid+1]
return find_peak(mid+1,hi) // a peak must exists in A[mid+1..hi]