# 852 Peak Index in a Mountain Array

An array `arr` a mountain if the following properties hold:

• `arr.length >= 3`
• There exists some `i` with `0 < i < arr.length - 1` such that:
• `arr < arr < ... < arr[i - 1] < arr[i]`
• `arr[i] > arr[i + 1] > ... > arr[arr.length - 1]`

Given a mountain array `arr`, return the index `i` such that `arr < arr < ... < arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]`.

You must solve it in `O(log(arr.length))` time complexity.

Example 1:

``````Input: arr = [0,1,0]
Output: 1
``````

Example 2:

``````Input: arr = [0,2,1,0]
Output: 1
``````

Example 3:

``````Input: arr = [0,10,5,2]
Output: 1
``````

Constraints:

• `3 <= arr.length <= 105`
• `0 <= arr[i] <= 106`
• `arr` is guaranteed to be a mountain array.

Binary search over the array of comparisons to find the largest index `i` such that `A[i] < A[i+1]`.

 `````` 1 2 3 4 5 6 7 8 9 10 `````` ``````class Solution: def peakIndexInMountainArray(self, arr: List[int]) -> int: l, r = 0, len(arr) - 1 while l < r: mid = l + (r - l) // 2 if arr[mid] < arr[mid+1]: l = mid + 1 else: r = mid return l``````