思路如下:
logN的时间复杂度,可以考虑采用二分法,不断逼近峰值对应下标。
比较nums[mid]与nums[mid+1]的大小,如果前者小于后者,则mid的右边一定存在峰值;如果前者大于后者,则mid左边一定存在峰值。
class Solution {
public int findPeakElement(int[] nums) {
//边界条件
if(nums==null||nums.length==0){
return -1;
}
if(nums.length==1){
return 0;
}
//二分法逼近
int low=0;
int high=nums.length-1;
int left=low;
int right=high;
while(left<right){
int mid=left+(right-left)/2;
//如果前者小于后者,那么在mid右边一定有峰值
if(nums[mid]<nums[mid+1]){
left=mid+1;
}
//反之左边一定有峰值
else{
right=mid;
}
}
return left;
}
}
原题地址:
162. 寻找峰值