075-寻找峰值-中等-Java


题目

寻找峰值.png

分析

考虑使用二分查找,如果中间元素大于其相邻的后续元素,则中间元素左侧(包括中间元素)必然包含一个局部最大值,如果中间元素小于其相邻的后续元素,则中间元素右侧必然包含一个局部最大值。直到最后左边沿和右边沿相遇,我们找到所求峰值。


代码

public class Solution {
    /*
     * @param A: 整型数组
     * @return: 返回任意一个峰值的位置
     */
    public int findPeak(int[] A) {
        int start = 0; // 左侧起始元素
        int end = A.length -1; // 右侧终止元素
        
        while (start < end) { // 循环比较 start 与 end,相等时退出
            int mid = start + ( end - start) / 2;  // 中间元素
            
            if (A[mid] < A[mid + 1]) {
                // 中间元素小于其相邻的后续元素,
                // 则中间元素右侧(不包含 mid)必然包含一个局部最大值,
                // 起始位置设为 mid 右侧相邻元素
                start = mid + 1; 
            } else {
                // 中间元素大于于其相邻的后续元素,
                // 则中间元素左侧(包含 mid)必然包含一个局部最大值,
                // 终止位置设为 mid 
                end = mid;
            }
        }
        
        return start; // start 与 end 相遇,返回结果
    }
}

参考

[C++]LeetCode: 118 Find Peak Element (二分查找 寻找数组局部峰值)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文出处:http://www.cnblogs.com/maybe2030/p/4715035.html引文出处:...
    明教de教主阅读 9,222评论 0 7
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,815评论 1 92
  • 本文试图从一个简单的小题目出发,引入算法的若干基本概念,重点引入一种方法:分治法,并且给出表述算法效率的记号。本文...
    Bintou老师阅读 2,393评论 0 3
  • 目录 [1. 顺序查找][2. 二分查找][3. 插值查找][4. 斐波那契查找][5. 树表查找][6. 分块查...
    jiangmo阅读 17,852评论 4 6
  • 在窗边喝水和一只猫四目相对我看见一只猫她看到了什么?
    NoneLand阅读 318评论 4 1