题目
题目链接
给出一个长为n的数组nums
,找出数组中的峰值
并返回下标,若有多个峰值可以返回任意一个下标
峰值
:当前元素大于其左右的元素,则当前元素为峰值
*nums[-1]和nums[n]视为-∞
二分查找
通过二分查找,不断往“上坡”的方向收缩区间求解
设置left
,right
,mid=(left+right)//2
,每次将nums[mid]
和nums[mid+1]
比较 :
- 若
nums[mid]<nums[mid+1]
,令left=mid+1
- 否则令
right=mid
举例理解:
代码
class Solution:
# 二分查找实现,每次往上坡的方向缩减区间
def findPeakElement(self, nums):
l, r = 0, len(nums) - 1
while l < r:
mid = (l + r) // 2
if nums[mid] < nums[mid + 1]:
l = mid + 1
else:
r = mid
return l