leetcode 162. Find Peak Element-查找峰元素

题目链接:leetcode162链接

思路:
最左端和最右端元素均无限小,则数组中一定存在一个峰元素。因为如果是单调增或单调减,那起点或终点为波峰。

要找到峰元素,我们只需找到刚刚开始下降而未下降的位置,可以使用二分法,nums[mid] 与 nums[mid+1] 进行比较可以知道刚刚开始下降而未下降的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution(object):
def findPeakElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l,r = 0,len(nums)-1
while l<r:
mid = (l+r)//2
if nums[mid]>nums[mid+1]:
r=mid
else:
l=mid+1
return l