1. 程式人生 > >LeetCode 162. Find Peak Element 20170706

LeetCode 162. Find Peak Element 20170706

都是 etc input log com element dex 不能 解題思路

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

Given an input array where num[i] ≠ num[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 num[-1] = num[n] = -∞.

For example, in array [1, 2, 3, 1]

, 3 is a peak element and your function should return the index number 2.

題目大意:

一個峰值元素是指它比鄰居都大

給一個數組,其中 num[i] ≠ num[i+1],找到它的峰值元素,並返回角標。num[-1] = num[n] = -∞

如果包含多個峰值,可以只返回其中的一個的角標。註意:算法應該是對數級的

解題思路:因為算法是對數級的,所以不能遍歷,還是需要用二分法。首先,由於兩端都是無窮小,所以必定存在峰值,而且峰值有可能有多個。可以先取數組的mid,如果mid比左邊的數小,那麽說明mid是處於從左邊下降的階段,那麽mid左邊必定存在峰值,如果mid比右邊元素大,說明mid處於往右邊上升的階段,mid右邊必定存在峰值。

技術分享

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

LeetCode 162. Find Peak Element 20170706