[
binary search
]
Leetcode 0852 Peak Index in a Mountain Array
Problem statement
https://leetcode.com/problems/peak-index-in-a-mountain-array/
Solution 1
We need to find place, for which difference between two adjacent element changes its sign, so we can just do binary search.
Complexity
Time complexity is O(log n)
, space is O(1)
.
Code
class Solution:
def peakIndexInMountainArray(self, arr):
beg, end = 0, len(arr) - 1
while beg < end:
mid = (beg + end) // 2
if arr[mid] < arr[mid + 1]:
beg = mid + 1
else:
end = mid
return beg
Solution 2
There is also ternary search for the cases, when function is not discrete.
Complexity
Time complexity is O(log n)
, in fact it is O(log3 n)
.
Code
class Solution:
def peakIndexInMountainArray(self, arr):
beg, end = 0, len(arr) - 1
while end - beg > 2:
mid1, mid2 = (2*beg + end)//3, (beg + 2*end)//3
if arr[mid1] > arr[mid2]:
end = mid2
else:
beg = mid1
return beg + 1