開始覺得無從下手,怎麼能用二分解決呢??
寫了好多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;
}
}