题目
峰值元素是指其值大于左右相邻值的元素。
给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
方法解析
1.二分查找
规律一:如果nums[mid+1] > nums[mid],则在mid+1之后一定存在峰值元素
规律二:如果nums[mid] > nums[mid+1],则在mid之前一定存在峰值元素
Python实现
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
l = 0
r = len(nums)-1
while l <r :
mid = (r-l)//2+l
# 规律一:如果nums[mid+1] > nums[mid],则在mid+1之后一定存在峰值元素
if nums[mid]<nums[mid+1]:
l =mid+1
# 规律二:如果nums[mid] > nums[mid+1],则在mid之前一定存在峰值元素
elif nums[mid]>nums[mid+1]:
r = mid
else:
print('nums[i] != nums[i + 1]')
return l
Golang实现
func findPeakElement(nums []int) int {
l := 0
r := len(nums)-1
for l<r{
mid:=l+(r-l)/2
if nums[mid]<nums[mid+1]{
l = mid+1
}else{
r = mid
}
}
return l
}