题目链接
852. 山脉数组的峰顶索引
题目
符合下列属性的数组 arr 称为 山脉数组 :
-
arr.length >= 3
-
存在 i(0 < i < arr.length - 1)使得:
-
arr[0] < arr[1] < ... arr[i-1] < arr[i]
-
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
-
给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下标 i 。
示例
- 示例一
输入: arr = [0,1,0]
输出: 1
- 示例二
输入: arr = [0,2,1,0]
输出: 1
- 示例三
输入: arr = [0,10,5,2]
输出: 1
- 示例四
输入: arr = [3,4,5,1]
输出: 2
- 示例五
输入: arr = [24,69,100,99,79,78,67,36,26,19]
输出: 2
-
提示
-
3 <= arr.length <= 104 -
0 <= arr[i] <= 106 -
题目数据保证
arr是一个山脉数组
-
方法解答
二分查找
- 分析
山脉数组其实是一种特殊的查找局部最大值的一种数组,这道题主要考点还是局部最大值的查找,还是考二分查找的算法。
- 代码
public int peakIndexInMountainArray(int[] arr) {
int l = 1;
int r=arr.length -2;
int ans = 0;
while(l <= r ){
int mid = l +((r - l)>> 1);
if(arr[mid]>arr[mid+1]){
ans = mid;
r=mid-1;
}else {
l=mid+1;
}
}
return ans;
}