162. 寻找峰值
https://leetcode-cn.com/problems/find-peak-element/
解法一:二分(递归分治)
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
n = len(nums)
#边界
if n == 1:
return 0
elif n == 2: #长度为2时取较大的
return 0 if nums[0] > nums[1] else 1
#长度>=3
else:
mid = n // 2 #取中点
#若中点比两侧大,直接去中点
if nums[mid-1] < nums[mid] > nums[mid+1]:
return mid
#若左侧大,说明左侧可能存在山峰,递归处理左侧数组
elif nums[mid-1] > nums[mid]:
return self.findPeakElement(nums[:mid])
#否则递归处理右侧
else:
return mid+1 + self.findPeakElement(nums[mid+1:])解法二:还是二分
其实也不用递归,不仅慢,占用内存还多,直接传统二分
解法三:暴力
首尾添加负无穷元素,然后一次遍历,结果和二分一样快,奇了怪
最后更新于