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;
    }
};
相关推荐
ysa0510306 小时前
动态规划-逆向
c++·笔记·算法
燃于AC之乐6 小时前
我的算法修炼之路--7—— 手撕多重背包、贪心+差分,DFS,从数学建模到路径DP
c++·算法·数学建模·深度优先·动态规划(多重背包)·贪心 + 差分
闻缺陷则喜何志丹6 小时前
【BFS 动态规划】P12382 [蓝桥杯 2023 省 Python B] 树上选点|普及+
c++·蓝桥杯·动态规划·宽度优先·洛谷
We་ct7 小时前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
福楠8 小时前
C++ STL | map、multimap
c语言·开发语言·数据结构·c++·算法
Sarvartha8 小时前
二分查找学习笔记
数据结构·c++·算法
daidaidaiyu8 小时前
一文入门 Android NDK 开发
c++
Ethernet_Comm8 小时前
从 C 转向 C++ 的过程
c语言·开发语言·c++
难得的我们8 小时前
C++与区块链智能合约
开发语言·c++·算法
diediedei9 小时前
C++编译期正则表达式
开发语言·c++·算法