題目
https://www.lintcode.com/problem/find-peak-element/description?_from=ladder&&fromId=2
實現
- 可以使用二分法進行查找
- 算出 mid 後,比較
A[mid] 和 A[mid + 1]
,如果是遞增,那麼left = mid
,否則right = mid
- 最後再去看
A[left]
和A[right]
誰大,返回對應下標
代碼
class Solution:
"""
@param A: An integers array.
@return: return any of peek positions.
"""
def findPeak(self, A):
left, right = 0, len(A) - 1
while left + 1 < right:
mid = left + (right - left) // 2
if A[mid] < A[mid + 1]:
left = mid
else:
right = mid
if A[right] > A[left]:
return right
else:
return left