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;
    }
};
相关推荐
从琳开始989几秒前
优选算法——双指针(算法原理+力扣题)
算法·leetcode·职场和发展
从琳开始9893 分钟前
优选算法——滑动窗口(概念+解题模板+LeetCode例题讲解)
算法·leetcode·职场和发展
Nil2085 分钟前
leetcode 94二叉树的中序遍历
算法·leetcode·职场和发展
兔兔兔兔16 分钟前
记录C++ 8
开发语言·c++
脑子不好的小菜鸟1 小时前
秋招、实习 小知识点复习 (C/C++/Linux)—— 碎片时间可看
c++·求职招聘
charlie1145141912 小时前
深探std::vector:三指针、扩容与迭代器失效
开发语言·c++·开源项目
圣保罗的大教堂2 小时前
leetcode 1386. 安排电影院座位 中等
leetcode
laplaya2 小时前
ROS常用消息之PointCloud2
c++
圣保罗的大教堂2 小时前
leetcode 3069. 将元素分配到两个数组中 I 简单
leetcode
Nil2083 小时前
leetcode 146LRU缓存
算法·leetcode·缓存