162. Find Peak Element

A peak element is an element that is greater than its neighbors.

Given an input array nums, where nums[i] ≠ nums[i+1], find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that nums[-1] = nums[n] = -∞.

Example 1:

Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.

Example 2:

Input: nums = [1,2,1,3,5,6,4]
Output: 1 or 5
Explanation: Your function can return either index number 1 where the peak element is 2,
or index number 5 where the peak element is 6.

Note:
Your solution should be in logarithmic complexity.

解题思路:
二分法
通过mid-1,mid+1,mid 判断 mid 是不是 peak, 如果Mid不是peak的话,那么大于它的那一边一定有 peak ,以为如果一直递增的话,到了边界也一定会有一个 peak。 所以每次可以舍去二分之一。

class Solution(object):
    def findPeakElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        s ,e = 0, len(nums) - 1
        while s + 1 < e:
            mid = s + (e - s) // 2
            if nums[mid - 1] < nums[mid] and nums[mid] >nums[mid + 1]:
                return mid
            elif nums[mid] <= nums[mid+1]:
                s = mid
            else:
                e = mid
        if nums[s] >= nums[e]:
            return s
        return e

请多多指教。

文章标题:162. Find Peak Element

本文作者:顺强

发布时间:2020-01-13, 23:59:00

原始链接:http://shunqiang.ml/leetcode-162-find-peak-el/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏