寻找峰值(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/难度入门)的主要内容,如果未能解决你的问题,请参考以下文章

寻找峰值(NC107/考察次数Top70/难度入门)

链表排序(NC70/考察次数Top44/难度简单)

螺旋矩阵(NC38/考察次数Top27/难度入门)

判断回文(NC141/考察次数Top43/难度入门)

反转字符串(NC103/考察次数Top26/难度入门)

寻找第K大(NC88/考察次数Top7/难度中等)