【题目】
寻找峰值返回坐标,比左右都大,时间复杂度必须是 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; } }