算法:在一条线上找到峰值

时间:2012-10-12 21:35:45

标签: algorithm language-agnostic

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

1 个答案:

答案 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]