给定n
整数,排列成一行,展示一种可以找到一个峰值的有效算法。一个峰值是一个不小于它旁边的两个数字的数字(或者它旁边的一个数字,如果它在行尾。)
问问题
550 次
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 回答