题目链接
思路
- 对于某个arr[mid],如果有
- arr[mid] > arr[mid - 1] && arr[mid] > arr[mid + 1],则mid是峰值
- arr[mid] > arr[mid - 1],则此时mid还在峰值左侧,需要改变left
- arr[mid] < arr[mid - 1],则此时mid在峰值右侧,需要改变right
- 这个题的亮点在于,因为我们中间对arr[mid - 1]和arr[mid + 1]做了判断,所以在最开始初始化left和right时向内移动了一个
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int left = 1, right = arr.length - 2, ans = -1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (arr[mid] > arr[mid - 1] && arr[mid] > arr[mid + 1])
return mid;
if (arr[mid] > arr[mid - 1])
left = mid + 1;
else
right = mid - 1;
}
return ans;
}
}