美文网首页
075-寻找峰值-中等-Java

075-寻找峰值-中等-Java

作者: NanCarp | 来源:发表于2017-10-14 16:11 被阅读0次

题目

寻找峰值.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 (二分查找 寻找数组局部峰值)

相关文章

  • 075-寻找峰值-中等-Java

    题目 分析 考虑使用二分查找,如果中间元素大于其相邻的后续元素,则中间元素左侧(包括中间元素)必然包含一个局部最大...

  • 寻找峰值

    峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],...

  • 寻找峰值

    峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找...

  • 寻找峰值

    题目 给出一个整数数组 (size 为 n),其具有以下特点: 相邻位置的数字是不同的A[0] < A[1] 并且...

  • 寻找峰值

    你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的A[0] < A[1] 并且 A[n -...

  • 寻找峰值

    峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],...

  • 寻找峰值

    题目:峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+...

  • 寻找峰值

    描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所...

  • 二分

    供暖器 寻找峰值

  • lintcode 寻找峰值

    你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的A[0] < A[1] 并且 A[n ...

网友评论

      本文标题:075-寻找峰值-中等-Java

      本文链接:https://www.haomeiwen.com/subject/rxzxuxtx.html