原題
你給出一個整數數組(size為n),其具有以下特點:
相鄰位置的數字是不同的
A[0] < A[1] 并且 A[n - 2] > A[n - 1]
假定P是峰值的位置則滿足A[P] > A[P-1]且A[P] > A[P+1],返回數組中任意一個峰值的位置。
給出數組[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即數值 2 所在位置, 或者6, 即數值 7 所在位置.
解題思路
- 分三種情況討論
- nums[mid] < nums[mid - 1]說明mid往前是一個遞增區間,存在峰值
- nums[mid] < nums[mid + 1]說明mid往后是一個遞增區間,存在峰值
- 第三種情況mid比左右都大,mid就是峰,返回mid
完整代碼
class Solution(object):
def findPeakElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return -1
start, end = 0, len(nums) - 1
while start + 1 < end:
mid = start + (end - start) / 2
if nums[mid] < nums[mid - 1]:
end = mid
elif nums[mid] < nums[mid + 1]:
start = mid
else:
return mid
return start if nums[start] > nums[end] else end