题解 | #寻找峰值#

寻找峰值

http://www.nowcoder.com/practice/1af528f68adc4c20bf5d1456eddb080a

寻找峰值

描述

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

方法一

思路分析

本题相对简单,首先对本题题意进行理解,寻找到的峰值为数组元素中最后的峰值,只需要判断前一个值是否小于当前值就可判断是否为山峰,因此只需要循环遍历一次即可找到最后的峰值。

图解


核心代码

class Solution {
public:
    /**
     * 寻找最后的山峰
     * @param a int整型一维数组 
     * @param aLen int a数组长度
     * @return int整型
     */
    int solve(int* a, int aLen) {
        // write code here
        int index =0;
        int max_element=a[0];
        for(int i=1;i<aLen;i++)
        {
            if(a[i]>a[i-1])
            {
               index=i;//只需要判断前一个值是否小于当前值就可判断是否为山峰
            }
        }
        return index;
    }
};
复杂度分析
  • 时间复杂度:循环遍历一次,所需时间复杂度为$O(n)$
  • 空间复杂度:空间复杂度为$O(1)$

方法二

思路分析

在寻找第二种办法时,我想到了金字塔数组的题目,金字塔数组中先找到所有的波谷,然后寻找波谷间距最大的值,与金字塔数组不同的是,本题需要找所有的波峰,为了便于计算,需要在开始位置与结束位置额外进行比较两个极小值,用于判断开始位置与结束位置是否为波峰。

图解


核心代码

class Solution {
public:
    /**
     * 寻找最后的山峰
     * @param a int整型一维数组 
     * @param aLen int a数组长度
     * @return int整型
     */
    int solve(int* a, int aLen) {
        // write code here
        int index=0;
        for(int i=0;i<aLen;i++)
        {
            if(i==0)//单独判断开始位置是否为山峰
            {
                if(a[i]>INT_MIN&&a[i]>a[i+1])
                    index=i;
            }
            else if(i==aLen-1)//单独判断结束位置是否为山峰
            {
                if(a[i]>INT_MIN&&a[i]>a[i-1])
                    index=i;
            }
            else 
            {
                if(a[i]>a[i-1]&&a[i]>a[i+1])//找到所有的山峰
                index=i;
            }
        }
        return index;//返回最后一个山峰的下标
    }
};
复杂度分析
  • 时间复杂度:循环遍历一次数组,时间复杂度为$O(n)$
  • 空间复杂度:空间复杂度为$O(1)$
全部评论

相关推荐

爪哇沉淀ing:哎 感觉很丰富 其实没啥含金量 我本科也是理工的 实话实说这个学校真的没啥竞争力 建议还是提升学历
今天你投了哪些公司?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3136次浏览 43人参与
# HR最不可信的一句话是__ #
1021次浏览 32人参与
# MiniMax求职进展汇总 #
24897次浏览 321人参与
# 春招至今,你的战绩如何? #
14766次浏览 137人参与
# AI面会问哪些问题? #
893次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2704次浏览 52人参与
# 巨人网络春招 #
11484次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1235次浏览 38人参与
# 你做过最难的笔试是哪家公司 #
1131次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2684次浏览 49人参与
# XX请雇我工作 #
51147次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7966次浏览 43人参与
# 简历第一个项目做什么 #
32073次浏览 357人参与
# 简历中的项目经历要怎么写? #
310908次浏览 4257人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152832次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187556次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64539次浏览 864人参与
# 如果重来一次你还会读研吗 #
229974次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178254次浏览 891人参与
# 你怎么看待AI面试 #
180654次浏览 1296人参与
# 正在春招的你,也参与了去年秋招吗? #
364172次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160822次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务