题目描述:

题解一:
题目规定对于所有有效的 i 都有 nums[i] != nums[i + 1],即所有相邻的元素都不会相等,因此nums数组中的最大值必然为峰值,返回最大值的下标。
class Solution(object):
def findPeakElement(self, nums):
nums2 = sorted(nums)
return nums.index(nums2[-1])
题解二:二分法
一个有极大值点的函数图像如下,如果nums[i]<nums[i+1],说明当前处在函数左半段,极大值点在i右边,如果nums[i]>nums[i+1],说明当前位置在函数右半段,极大值点在i左边。

class Solution(object):
def findPeakElement(self, nums):
left = 0
right = len(nums)-1
while left<right:
mid = left + (right - left) // 2
if nums[mid]>nums[mid+1] and nums[mid]>nums[mid-1]:
return mid
elif nums[mid]<nums[mid+1]:
left = mid+1
else:
right = mid-1
return left
版权声明:本文为laurasam原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。