题解 | #寻找峰值# 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时,再遇到 “峰”>右值,即“峰”为真峰。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:22
怎么这么多逆天求职者,救救我救救我救救我😭
flmz_Kk:哈哈哈哈哈哈,这么多求职者,肯定有那一两个逆天的
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务