Find peak element

题目描述

解题方法

Solution

class Solution(object):
    def findPeakElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        length = len(nums)
        if length == 1:
            return 0
        if length == 2:
            return 0 if nums[0] > nums[1] else 1
        start = 0 
        end = length - 1

        while start + 1 < end:
            mid = start + (end-start)/2
            if nums[mid] > nums[mid-1] and nums[mid] > nums[mid+1]:
                return mid
            elif nums[mid] <= nums[mid-1]:
                end = mid
            elif nums[mid] <= nums[mid+1]:
                start = mid


        if start == 0 or (nums[start] > nums[start-1] and nums[start] > nums[start+1]):
            return start
        if end == length - 1 or (nums[end] > nums[end-1] and nums[end] > nums[end+1]):
            return end

        return -1

Reference