leetcode 162. 寻找峰值 python

题目描述:

题解一:

题目规定对于所有有效的 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版权协议,转载请附上原文出处链接和本声明。