这个题,看似好像不是递增或者递减数组,但是给定的数组有二段性,也就是说仍然可以用二分查找。
以图中的数组为例,我们需要查找的是10。
那么只需要用二分查找:
- arr[mid] > arr[mid - 1] 说明mid在右边的区间,让right = mid - 1
- arr[mid] < arr[mid - 1] 说明mid在左边的区间,让left = mid
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int left = 0;
int right = arr.length - 1;
while(left < right){
int mid = left + (right - left + 1) / 2;
if(arr[mid] < arr[mid - 1]){
right = mid - 1;
}else{
left = mid;
}
}
return left;
}
}