Problem
A peak element is an element that is strictly greater than its neighbors.
Given a 0-indexed integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.
You may imagine that nums[-1] = nums[n] = -∞. In other words, an element is always considered to be strictly greater than a neighbor that is outside the array.
You must write an algorithm that runs in O(log n) time.
Algorithm
Using bineary search. If nums[Mid] > nums[Mid], there will a peak in the front half part, else there will be a peak in the second half part.
Code
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
L, R = 0, len(nums)-1
while L < R:
Mid = (L + R) // 2
if nums[Mid] > nums[Mid+1]:
R = Mid
else:
L = Mid+1
return R