【题目】

寻找峰值返回坐标,比左右都大,时间复杂度必须是 O(log n) 

A peak element is an element that is strictly greater than its neighbors.

Given an integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.

You may imagine that nums[-1] = nums[n] = -∞.

You must write an algorithm that runs in O(log n) time.

 

Example 1:

Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.

Example 2:

Input: nums = [1,2,1,3,5,6,4]
Output: 5
Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.

 

【思路】

  • 关联题152:https://www.cnblogs.com/inku/p/15161555.html
  • 用二分查找从中间开始,mid,mid2=mid+1
  • 如果前mid>后mid2,那前点mid必不为峰值,左区间逼近left=mid+1
  • 如果前mid<后mid2,那已满足了峰值比左大的条件,右区间逼近,看是否也比右边大即可,right=mid

 

【代码】

class Solution {
    public int findPeakElement(int[] nums) {
        int left=0;int right=nums.length-1;
        while(left<right){
            int mid=left+(right-left)/2;
            int mid2=mid+1;
            if(nums[mid]>nums[mid2])
                right=mid;
            else if(nums[mid]<nums[mid2])
                left=mid+1;
        }
        return left;
    }
}

 

 posted on 2021-08-19 14:58  alau  阅读(49)  评论(0编辑  收藏  举报