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