1、前言

2、思路
我开始以为最快的解法是 O(n),结果我错了,最快的是 O(logn)。O(n) 的解法傻子都能解出来,直接一趟遍历就行,可以把峰值当作一个折线,拐弯处就是峰值,这样的代码会写的很精简。
但是二分法不是那么好想的,这里就不写了。
3、代码
线性时间:
class Solution {
public int findPeakElement(int[] nums) {
if(nums == null || nums.length == 0){
return 0;
}
for(int i = 0; i < nums.length - 1; i++){
if(nums[i] > nums[i + 1]){
return i;
}
}
return nums.length - 1;
}
}
二分法:
class Solution {
public int findPeakElement(int[] nums) {
if(nums == null || nums.length == 0){
return 0;
}
int left = 0, right = nums.length - 1;
while(left < right){
int mid = (right - left) / 2 + left;
if(nums[mid] < nums[mid + 1]){
left = mid + 1;
}else{
right = mid;
}
}
return left;
}
}
网友评论