less than 1 minute read

Problem Statement

leetcode problem link

My Solution [Accepted]

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        N = len(nums)
        l, r = 0, N - 1
        while l < r:
            mid = l + (r - l) // 2
            low = nums[mid - 1] if mid - 1 >= 0 else float('-inf')
            high = nums[mid + 1] if mid + 1 < N else float('-inf')
            if low < nums[mid] and nums[mid] > high:
                return mid
            elif nums[mid] < nums[r]:
                l = mid + 1
            else:
                if mid - 1 >= 0 and nums[mid -1] < nums[mid]:
                    l = mid + 1
                else:
                    r = mid - 1

        return l

Editorial

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        l = 0
        r = len(nums) - 1
        while l < r:
            mid = (l + r) // 2
            if nums[mid] > nums[mid + 1]:
                r = mid
            else:
                l = mid + 1
        return l