• LeetCode--162. 寻找峰值(C++描述)


    // Source : https://leetcode.cn/problems/min-stack/
    // Date : 2022-11-9
    /**************************************************************************************
    峰值元素是指其值严格大于左右相邻值的元素。

    给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

    你可以假设 nums[-1] = nums[n] = -∞ 。

    你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

    示例 1:

    输入:nums = [1,2,3,1]
    输出:2
    解释:3 是峰值元素,你的函数应该返回其索引 2。
    示例 2:

    输入:nums = [1,2,1,3,5,6,4]
    输出:1 或 5
    解释:你的函数可以返回索引 1,其峰值元素为 2;
    或者返回索引 5, 其峰值元素为 6。

    提示:

    1 <= nums.length <= 1000
    -231 <= nums[i] <= 231 - 1
    对于所有有效的 i 都有 nums[i] != nums[i + 1]
    **************************************************************************************/

    /*******************************************************************************************************
    题目分析 : 本题可以参考二分查找,使用爬坡的方法,当中间位置的元素值小于其后的元素值,那么肯定处于上坡阶段,因此就在其后进行二分查找即可,最终的峰值就是right指针所指向的元素。
    ********************************************************************************************************/

    // class Solution {
    // public:
    //     int findPeakElement(vector& nums) {
    //         // 本算法的时间复杂度为O(n),最大值肯定满足峰值的需求,但是时间复杂度过高
    //         return max_element(nums.begin(), nums.end()) - nums.begin();
    //     }
    // };
    
    class Solution{
        public:
        int findPeakElement(vector<int> & nums)
        {
            int left = 0, right = nums.size() - 1;
            while(left < right)
            {
                int mid = (left + right) / 2;
                // 如果中间位置的值小于其后的值,那么一定在上坡
                if(nums[mid] < nums[mid + 1])
                {
                    left = mid + 1;
                }
                else
                    right = mid;
            }
            return right;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    牛客网刷题篇
    说说Vue响应式系统中的Watcher和Dep的关系-面试进阶
    ETL数据转换工具类型与适用场景
    20231008工作心得:sql
    【Vue面试题十八】、你知道vue中key的原理吗?说说你对它的理解
    照片会说话的软件,快来试试这个小功能
    哲学视角下的线上虚拟实验
    浙江巨化上线法大大iTerms,AI助力合同审查数智化
    【LeetCode】25. 542_01 Matrix · 01矩阵
    使用Github Actions自动同步到Gitee仓库
  • 原文地址:https://blog.csdn.net/qq_44614524/article/details/127779406