解法
解法一:线性搜索
由于相邻的元素一定不相等,从左往右起第一个使得nums[i]>nums[i+1]
的就是峰值
解法二:二分查找
把数组想像成一个个山丘,左边是上坡,右边是下坡
- 如果mid比它后面的元素大,说明mid在下坡,顶点一定在mid左边
- 如果mid比它后面的元素小,说明mid在上坡,顶点一定在mid右边
class Solution(object):
def findPeakElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
if n==0:
return -1
l = 0
r = n-1
while l<r:
mid = (l+r)>>1
if mid == n-1 or nums[mid]>nums[mid+1]:
r = mid
else:
l = mid+1
return r