题解 | #寻找峰值#

寻找峰值

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;
    }
}
全部评论

相关推荐

10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务