符合下列属性的数组 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 。
二分法
mid在递增区间 则删除左半区间
在递减区间 则删除右半区间
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int l = 0, r = arr.length - 1;
while(l + 1 < r){
int mid = l + (r - l) / 2;
if(arr[mid] > arr[mid-1])
l = mid;
else if(arr[mid] > arr[mid+1])
r = mid;
else
return mid;
}
return arr[l] > arr[r] ? l : r;
}
}