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;
    }
};
相关推荐
6Hzlia1 天前
【Hot 100 刷题计划】 LeetCode 141. 环形链表 | C++ 哈希表直觉解法
c++·leetcode·链表
handler011 天前
Linux 进程探索:从 PCB 管理到 fork() 的写时拷贝
linux·c语言·c++·笔记·学习
众少成多积小致巨1 天前
GNU Make 核心指南
android·c++
谭欣辰1 天前
详细讲解 C++ 状压 DP
开发语言·c++·动态规划
William_wL_1 天前
【C++】stack和queue的使用和实现(附加deque的简单介绍)
开发语言·c++
山甫aa1 天前
二叉树遍历----从零开始的数据结构
数据结构·c++·二叉树
北顾笙9801 天前
day35-数据结构力扣
数据结构·算法·leetcode
cpp_25011 天前
P2249 【深基13.例1】查找
数据结构·c++·算法·题解·二分·洛谷
苏宸啊1 天前
C++智能指针
c++
OYangxf1 天前
基于epoll的单线程Reactor:Tinyredis的网络层实现
c++·redis