开始觉得无从下手,怎么能用二分解决呢??
写了好多if判断过了。
后来想明白了
这个题就是用二分逼近其中一个最高点。
即用二分找到一个山峰即可。
在山上无非两种情况
- 上坡:那我们一直向上走。即
left=mid+1(
不必担心悬崖,悬崖正好也是解) - 下坡:那我们反向走,去走上坡,即
right=mid
- 这样会逼近一个山峰。
class Solution {
public int findPeakElement(int[] nums) {
if(nums.length==1) return 0;
int l = 0, r = nums.length - 1;
while (l <r) {
int mid = (l + r) / 2;
if (nums[mid] > nums[mid + 1])//下坡
r = mid;
else//上坡
l = mid + 1;
}
return l;
}
}