共计 1102 个字符,预计需要花费 3 分钟才能阅读完成。
A peak element is an element that is greater than its neighbors.Given an input array nums, where nums[i] ≠ nums[i+1], find a peak element and return its index.The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.You may imagine that nums[-1] = nums[n] = -∞.
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: 1 or 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.
Note:Your solution should be in logarithmic complexity.
难度:medium
题目:峰值指当前元素大于其邻居,给定一数组相离元素不等,找出其峰值并返回其索引。数组可能包含多个峰值,返回任一即可。注意:时间复杂度为对数
思路:二叉搜索,nums[mid] > nums[mid + 1] 留下左边,nums[mid] > nums[mid + 1] 意味着 nums[mid] 可为潜在的峰值,如果左边是升序则其为峰值,否则继续查找。如果 mid 已是最左边的数,则为其为峰值。
Runtime: 2 ms, faster than 100.00% of Java online submissions for Find Peak Element.Memory Usage: 37.6 MB, less than 100.00% of Java online submissions for Find Peak Element.
public class Solution {
public int findPeakElement(int[] nums) {
int left = 0, right = nums.length – 1;
while (left < right) {
int mid = left + (right – left) / 2;
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
}