2021/01/26
分析
使用二分模板:
原命题可转化为:
- 找到第一个比右边大的元素。
- 或者找到最后一个比左边大的元素。
由于二分模板比较擅长找「第一个」,所以用第一种来实现。
实现
这里直接使用二分模板
class Solution {
public int findPeakElement(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r) {
int mid = l + (r - l) / 2;
if (check(mid, nums)) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
// 找到第一个比右边大的
public boolean check(int mid, int[] nums) {
return nums[mid] > nums[mid + 1];
}
}