162. Find Peak Element

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

}

原文 

https://segmentfault.com/a/1190000018153720

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 162. Find Peak Element

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址