寻求峰值(NC107)

题目描述

山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。

假设 nums[-1] = nums[n] = -∞。

牛客网:NC107括号序列

示例1

输入

[2,4,1,2,7,8,4]

输出

5

解题思路

首先题目提到山峰元素是大于或等于左右相邻值的元素相邻元素值不相等,并且nums[-1] = nums[n] = -∞。最终需要的是山峰的最大索引,本题目我们可以从后往前遍历,需要值得注意的是,数组两个边界以外都是-∞,我们在判断左边第一个元素的时候,只需要从右往左第一个元素大于从右往左第二个元素即可。若不满足上述条件,就要从右往左遍历,即a[i-1]<=a[i]&&a[i+1]<=a[i]。还有一种情况,山峰元素位[7,6,5,4,3,2,1],此时由可以得到,第0号元素符合条件,直接返回0。

代码实现

public int solve (int[] a) {
    if(a[a.length-2]<=a[a.length-1]) return a.length-1;
    for (int i = a.length-2; i>0;i--) {
        if (a[i-1]<=a[i]&&a[i+1]<=a[i]){
            return i;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/ilyar1015/p/14753482.html