题解 | #寻找峰值#
寻找峰值
http://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于 2.假设 nums[-1] = nums[n] = -\infty−∞ 3.对于所有有效的 i 都有 nums[i] != nums[i + 1] 4.你可以使用O(logN)的时间复杂度实现此问题吗?
import java.util.*;
public class Solution {
public int findPeakElement (int[] nums) {
int len =nums.length;
if(len==1){
return 0;
}
//如果第一个值,比第二个值大,第一个值为峰值,nums[-1] 为负无穷,题上要求
if(nums[0]>nums[1]){
return 0;
}
//如果倒数第一个值比第二个值大,倒数第一个为峰值 nums[n]为负无穷
if(nums[len-2]<nums[len-1]){
return len-1;
}
int right = len-2;
int left=1;
//开始左右两个指针找,找到就返回
while(left<=right){
if(nums[left-1]<nums[left]&&nums[left]>nums[left+1]){
return left;
}
if(nums[right-1]<nums[right]&&nums[right]>nums[right+1]){
return right;
}
left++;
right--;
}
return 0;
}
}