852. Peak Index in a Mountain Array
Description
You are given an integer mountain array arr of length n where the values increase to a peak element and then decrease.
Return the index of the peak element.
Your task is to solve it in O(log(n)) 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 <= 1050 <= arr[i] <= 106arris guaranteed to be a mountain array.
Solutions
Solution 1
Thinking
The array rises strictly then falls strictly; we need the peak index. A linear scan works, but \(n\le 10^5\) and the peak test is monotone: left of the peak \(arr[i]<arr[i+1]\), right of it the opposite.
Binary search \([1,n-2]\): if \(arr[mid]>arr[mid+1]\) the peak is in the left half (including \(mid\)), otherwise in the right. The left endpoint is the peak.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |