寻找峰值(NC107/考察次数Top70/难度入门)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寻找峰值(NC107/考察次数Top70/难度入门)相关的知识,希望对你有一定的参考价值。
描述:
山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。
假设 nums[-1] = nums[n] = -∞。
示例1
输入:
[2,4,1,2,7,8,4]
返回值:
5
(题目来自牛客网)
用C++实现如下
class Solution
public:
/**
* 寻找最后的山峰
* @param a int整型一维数组
* @param aLen int a数组长度
* @return int整型
*/
int solve(int* a, int aLen) //传入a数组的指针,以及a数组的长度
//思路,输入的是数组a的指针,以及a数组的长度;求解的是最后一个峰值
if(aLen<1) //开始一般处理非常态的情况
return -1; //返回值是-1一般表示有异常
if(aLen==1)
return a[0];
for(int i=aLen-1;i>=0;i--) //从后往前寻找最后的一个山峰
if(i==aLen-1) //优先考虑最左边值和最右边值的特殊情况,此处为最右边值(最右边值大于倒数第二个,则最右为峰)
if(a[i]>a[i-1])
return i;
else if(i==0) //优先考虑最左边值和最右边值,此处为最左边值,从右往左一路高歌也行(一路遍历到了最左边第一个且为最大,则为峰)
if(a[i]>a[i+1])
return i;
else if(a[i]>a[i-1]&&a[i]>a[i+1]) //常态,则比左右两边都大,通用情况为峰值在中间
return i;
return -1; //int 类型函数返回值是-1一般表示有异常
;
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于寻找峰值(NC107/考察次数Top70/难度入门)的主要内容,如果未能解决你的问题,请参考以下文章