Variation of One-sided Binary Search.

class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        
        alen = len(arr)
        l, r = 0, alen - 1
        res = -1
        
        while l <= r:
            
            m = (l+r) // 2
            
            if m == alen-1 or arr[m] > arr[m+1]:
                r = m - 1
                res = m
            else:
                l = m + 1
        
        return res

Need to be careful with the update condition; we have to update res = m if m == alen - 1, since if we try to access any index larger than alen - 1 we’re gonna get an error (outside of array).