C++ | Leetcode C++题解之第162题寻找峰值

题目:

题解:

cpp 复制代码
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();

        // 辅助函数,输入下标 i,返回一个二元组 (0/1, nums[i])
        // 方便处理 nums[-1] 以及 nums[n] 的边界情况
        auto get = [&](int i) -> pair<int, int> {
            if (i == -1 || i == n) {
                return {0, 0};
            }
            return {1, nums[i]};
        };

        int left = 0, right = n - 1, ans = -1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (get(mid - 1) < get(mid) && get(mid) > get(mid + 1)) {
                ans = mid;
                break;
            }
            if (get(mid) < get(mid + 1)) {
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
        }
        return ans;
    }
};
相关推荐
涛ing25 分钟前
23. C语言 文件操作详解
java·linux·c语言·开发语言·c++·vscode·vim
半桔30 分钟前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git
阿猿收手吧!38 分钟前
【Linux网络总结】字节序转换 收发信息 TCP握手挥手 多路转接
linux·服务器·网络·c++·tcp/ip
NOAHCHAN19871 小时前
怎么解决Visual Studio中两个cpp文件中相同函数名重定义问题
c++·visual studio
Ciderw1 小时前
Golang并发机制及CSP并发模型
开发语言·c++·后端·面试·golang·并发·共享内存
Uitwaaien542 小时前
51 单片机矩阵键盘密码锁:原理、实现与应用
c++·单片机·嵌入式硬件·51单片机·课程设计
小唐C++2 小时前
C++小病毒-1.0勒索
开发语言·c++·vscode·python·算法·c#·编辑器
醇醛酸醚酮酯2 小时前
Leetcode热题——移动零
算法·leetcode·职场和发展
夏末秋也凉3 小时前
力扣-数组-704 二分查找
算法·leetcode
qy发大财3 小时前
平衡二叉树(力扣110)
数据结构·算法·leetcode·职场和发展