山脉数组的峰顶索引. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/peak-index-in-a-mountain-array/
这个题,看似好像不是递增或者递减数组,但是给定的数组有二段性,也就是说仍然可以用二分查找。
以图中的数组为例,我们需要查找的是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;
}
}