1.题目描述
2.代码构思(debug)
方法1:寻找最大值,其对应的必是峰值
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
if not nums:
return
idx = 0
for i in range(1, len(nums)):
if nums[i] > nums[idx]:
idx = i
return idx
方法2: 二分法
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
if not nums:
return
n = len(nums)
# 辅助函数 方便处理 nums[-1] 以及 nums[n] 的边界情况
def Get(i):
if i == -1 or i == n:
return float('-inf')
return nums[i]
left, right, ans = 0, n - 1, -1
while left <= right:
mid = (left + right) // 2
if Get(mid - 1) < Get(mid) >Get(mid + 1):
ans = mid
break
if Get(mid) < Get(mid + 1):
left = mid + 1
else:
right = mid - 1
return ans