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;
    }

 

上一篇:aluminum


下一篇:Selenium-css_selector书写规则