寻求峰值(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;
}