162. Find Peak Element

2022/1/4 6:07:19

本文主要是介绍162. Find Peak Element,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

这道题里面有个隐藏条件:nums[-1] = nums[n] = -∞, 这就意味着数组最边上的两个数也有可能符合条件被返回,算法如下:

    public int findPeakElement(int[] nums) {
        int n = nums.length;
        for(int i=1;i<nums.length-1;i++){
            if(nums[i]>nums[i-1]&&nums[i]>nums[i+1])
                return i;
        }
        if(nums.length==1)
            return 0;
        else if(nums[0]>nums[1])
                return 0;
        else 
            return nums.length-1;
    }

但是题目要求:时间复杂度必须是O(log n),其实就是在考察binary search。

Binary Search的算法如下,时间复杂度O(log n):

    public int findPeakElement(int[] nums) {
        if (nums.length == 0)
            return 0;
        int start = 0, end = nums.length - 1;
        int mid = (start + end) / 2;
        while (start < end) {
            if (nums[mid] > nums[mid + 1]) {
                end = mid;
            } else {
                start = mid + 1;
            }
            mid = (start + end) / 2;
        }
        return mid;
    }

 



这篇关于162. Find Peak Element的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程