2

给定n整数,排列成一行,展示一种可以找到一个峰值的有效算法。一个峰值是一个不小于它旁边的两个数字的数字(或者它旁边的一个数字,如果它在行尾。)

4

1 回答 1

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]
于 2012-10-12T21:35:45.177 回答