题解 | #寻找峰值# C++ 遍历解法

寻找峰值

https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76

class Solution {
  public:
    int findPeakElement(vector<int>& nums) {
        const int n = nums.size();
        int state = 1; // 记录峰与左元素的比较大小状态
        for (int i = 1; i < n; ++i) {
            if (nums[i - 1] <= nums[i]) { // 上升状态,更新state
                state = nums[i - 1] != nums[i]; // 如果与左值相等,则state置0,否则置1
                continue;
            }
            if (state) return i - 1; // state = 1 且 峰 > 右值,即左值 < 峰 > 右值
        }
        return state ? n - 1 : -1; // 遍历完未找到,判断state,state=1,则有峰,否则无峰
    }
};

直观想法:判断峰值需要知道 假定的这个”峰“与左右值的大小状态,使得左值 < 峰 > 右值。

具体做法:设置一个state记录”峰“与左边元素的比较大小状态,即`state = 1 if 峰 > 左值 else 0`,值得注意的是,“峰”与左值相等时,状态也要为0;state=1时,再遇到 “峰”>右值,即“峰”为真峰。

全部评论

相关推荐

04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
那么好了好了:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务