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;
    }
};
相关推荐
澈2076 分钟前
STL迭代器:容器遍历的万能钥匙
开发语言·c++
azoo15 分钟前
emplace_back和push_back() 函数添加 cv::Point 类型数据
c++·opencv
样例过了就是过了1 小时前
LeetCode热题 不同路径
c++·算法·leetcode·动态规划
Navigator_Z2 小时前
LeetCode //C - 1031. Maximum Sum of Two Non-Overlapping Subarrays
c语言·算法·leetcode
橙子也要努力变强2 小时前
信号的保存、阻塞与递达
linux·服务器·c++
旖-旎2 小时前
深搜练习(组合总和)(7)
c++·算法·深度优先·力扣
T0uken2 小时前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
睡一觉就好了。2 小时前
C++11(一)
c++
水云桐程序员3 小时前
C++的主要应用场景
c++·学习方法