-
解法1:直接遍历一遍
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
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:
n = len(nums)
# 辅助函数,输入下标 i,返回 nums[i] 的值
# 方便处理 nums[-1] 以及 nums[n] 的边界情况
def helper(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 helper(mid - 1) < helper(mid) > helper(mid + 1):
ans = mid
break
if helper(mid) < helper(mid + 1):
left = mid + 1
else:
right = mid - 1
return ans