问题
例子
思路
要求时间复杂度为:O(logn),则一定是用二分查找
如何二分?
nums[mid]<nums[mid+1]时,mid+1~len-1一定存在峰值,此时mid+2只有两种可能。
一:小于mid+1,那么mid+1就是峰值
二:大于mid+1,则继续向右推,如果一直到数组的末尾都是大于的,那么可以肯定最后一个元素是峰值,因为nums[nums.length]=负无穷
-
方法1
-
方法2
代码
//方法1
class Solution {
public int findPeakElement(int[] nums) {
int i=0,j=nums.length-1;
while(i<j){
int m=i+(j-i)/2;
if(nums[m]<nums[m+1]) i=m+1;
else j=m;
}
return i;
}
}
//方法2