示例 1: 输入:arr = [0,1,0] 输出:1 示例 2: 输入:arr = [0,2,1,0] 输出:1 示例 3: 输入:arr = [0,10,5,2] 输出:1 示例 4: 输入:arr = [3,4,5,1] 输出:2思路
二段性分析 + 二分本质
本题说明二分不一定要有单调性,本质是二段思想,找出满足能将原来的数划分成两种情况
类比搜索旋转排序数组,其实就是找到两端分界的位置,左边的规律是上升,当前数会大于前一个数
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int l = 1, r = arr.length - 2;
while (l < r) {
int mid = l + r + 1 >> 1;
//满足上升这个性质
if (arr[mid] > arr[mid - 1]) {
l = mid;
} else {
r = mid - 1;
}
}
return l;
}
}



