Let's call an arrayA
amountain if the following properties hold:
A.length
>
= 3
0
<
i
<
A.length - 1
such that
A[0]
<
A[1]
<
... A[i-1]
<
A[i]
>
A[i+1]
>
...
>
A[A.length - 1]
Given an array that is definitely a mountain, return any i
such that A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
.
Example 1:
Input:
[0,1,0]
Output:
1
Example 2:
Input:
[0,2,1,0]
Output:
1
Note:
3
<
= A.length
<
= 10000
class Solution {
public int peakIndexInMountainArray(int[] A) {
int n = A.length;
int start = 1, end = n - 2;
while (start + 1 < end){
int mid = start + (end - start) / 2;
if (A[mid] > A[mid - 1] && A[mid] > A[mid + 1]) return mid;
else if (A[mid] >= A[mid - 1] && A[mid] <= A[mid + 1]) start = mid;
else end = mid;
}
if (A[start] > A[end]) return start;
else return end;
}
}