news 2026/4/15 6:40:56

LeetCode 面试经典 150_二分查找_寻找峰值(113_162_C++_中等)(暴力破解,二分查找)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 面试经典 150_二分查找_寻找峰值(113_162_C++_中等)(暴力破解,二分查找)

LeetCode 面试经典 150_二分查找_寻找峰值(113_162_C++_中等)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(暴力破解):
        • 思路二(二分查找):
      • 代码实现
        • 代码实现(思路一(暴力破解)):
        • 代码实现(思路二(二分查找)):
        • 以思路一为例进行调试

题目描述:

峰值元素是指其值严格大于左右相邻值的元素。

给你一个整数数组 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]

题解:

解题思路:

思路一(暴力破解):

1、利用 对于所有有效的 i 都有nums[i] != nums[i + 1],那最大值必定为峰值。(返回任何一个峰值所在位置即可。)
2、复杂度分析:
① 时间复杂度:O(n),n 为数组中元素的个数,只遍历了一遍数组中的元素。
② 空间复杂度:O(1)。

思路二(二分查找):

1、利用 对于所有有效的 i 都有nums[i] != nums[i + 1]。运用一个结论,当 nums[i]<nums[i+1] 时 【i+1 ~ nums.size()-1】 必定有峰值,反之 0~i 必定有峰值。(返回任何一个峰值所在位置即可)
例: nums=[1,2,3,4,2,1] ,3<4 那么 4 到最后一定有峰值。

2、复杂度分析
① 时间复杂度:O(logn),其中 n 为 nums 的长度。
② 空间复杂度:O(1)。

代码实现

代码实现(思路一(暴力破解)):
classSolution1{public:// 函数 findPeakElement 接受一个整数向量 nums,并返回一个峰值元素的索引intfindPeakElement(vector<int>&nums){intid=-1;// 初始化 id 为 -1,表示当前没有找到峰值longlongmaxNum=-2147483649;// 初始化 maxNum 为一个非常小的数(比最小的 int 还小)// 遍历 nums 向量中的每个元素for(inti=0;i<nums.size();i++){// 如果当前元素 nums[i] 大于 maxNumif(nums[i]>maxNum){// 更新 id 为当前索引 iid=i;// 更新 maxNum 为当前元素 nums[i]maxNum=nums[i];}}// 返回找到的峰值元素的索引 idreturnid;}};
代码实现(思路二(二分查找)):
classSolution2{// 利用二分查找的原理来寻找峰值元素// 结论:如果 nums[i] < nums[i+1],那么 i+1 到 nums.size()-1 的范围内必定存在峰值// 如果 nums[i] > nums[i+1],那么 0 到 i 的范围内必定存在峰值// 因此可以通过比较中间元素与其右侧相邻元素的大小来进行二分搜索public:// 函数 findPeakElement 接受一个整数向量 nums,并返回找到的峰值元素的索引intfindPeakElement(vector<int>&nums){intleft=0;// 初始化左边界intright=nums.size()-1;// 初始化右边界// 当左边界小于右边界时继续查找while(left<right){// 计算中间索引 mid,避免溢出intmid=left+(right-left)/2;// 比较中间元素 nums[mid] 和其右侧元素 nums[mid + 1]if(nums[mid]>nums[mid+1]){// 如果 mid 位置的元素大于其右侧元素,意味着峰值可能在 mid 或者左侧right=mid;// 显示更新右边界}else{// 如果 mid 位置的元素小于其右侧元素,意味着峰值一定在右侧left=mid+1;// 更新左边界}}// 当左边界与右边界相遇时,left 位置即为我们找到的峰值元素索引returnleft;}};
以思路一为例进行调试
#include<iostream>#include<vector>usingnamespacestd;classSolution1{public:// 函数 findPeakElement 接受一个整数向量 nums,并返回一个峰值元素的索引intfindPeakElement(vector<int>&nums){intid=-1;// 初始化 id 为 -1,表示当前没有找到峰值longlongmaxNum=-2147483649;// 初始化 maxNum 为一个非常小的数(比最小的 int 还小)// 遍历 nums 向量中的每个元素for(inti=0;i<nums.size();i++){// 如果当前元素 nums[i] 大于 maxNumif(nums[i]>maxNum){// 更新 id 为当前索引 iid=i;// 更新 maxNum 为当前元素 nums[i]maxNum=nums[i];}}// 返回找到的峰值元素的索引 idreturnid;}};intmain(){vector<int>nums={1,2,3,1};Solution1 s;cout<<s.findPeakElement(nums);return0;}

LeetCode 面试经典 150_二分查找_寻找峰值(113_162)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 21:51:55

IAR软件安装超详细版:包含补丁安装与路径设置

IAR安装避坑指南&#xff1a;从零配置到团队协作的实战经验 在嵌入式开发的世界里&#xff0c;一个稳定可靠的IDE环境&#xff0c;往往比写代码本身更让人头疼。尤其是当你兴冲冲地打开IAR准备调试STM32项目时&#xff0c;却发现“目标芯片无法识别”、“编译报错头文件找不到…

作者头像 李华
网站建设 2026/4/11 2:40:19

零基础入门:《无尽冬日》脚本编辑完全指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个《无尽冬日》脚本学习助手&#xff0c;功能包括&#xff1a;1. 交互式脚本语法教程&#xff1b;2. 常见修改案例分步指导&#xff1b;3. 实时错误检查和修正建议&#xff…

作者头像 李华
网站建设 2026/4/14 10:16:53

小白也能懂:Windows安装清理三步搞定

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个极简的Windows安装清理向导工具&#xff0c;专为电脑新手设计。只需三个步骤&#xff1a;1) 一键扫描 2) 查看建议清理项 3) 确认清理。界面要求使用大量图示和简单语言说…

作者头像 李华
网站建设 2026/4/13 23:48:40

用AI魔改COFFEETIME:5分钟打造个性化咖啡推荐系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于用户历史订单数据的咖啡推荐系统。要求&#xff1a;1. 使用Python编写核心算法 2. 实现基于协同过滤的推荐逻辑 3. 集成用户口味偏好分析模块 4. 输出推荐结果可视化界…

作者头像 李华
网站建设 2026/4/10 18:42:06

Qwen3-VL-WEBUI显存不足怎么办?云端按需租用,成本降90%

Qwen3-VL-WEBUI显存不足怎么办&#xff1f;云端按需租用&#xff0c;成本降90% 引言&#xff1a;创业团队的显存困境 作为AI创业团队的技术负责人&#xff0c;我完全理解你们遇到的困境&#xff1a;用RTX 3060显卡&#xff08;通常只有12GB显存&#xff09;跑Qwen3-VL时频繁爆…

作者头像 李华
网站建设 2026/4/11 22:03:09

企业级报表解决方案:JasperSoft Studio实战下载与配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业级JasperSoft Studio部署向导应用&#xff0c;包含&#xff1a;1) 多版本比较工具 2) 依赖库自动检测与安装 3) 企业代理配置助手 4) 性能调优建议生成器 5) 团队协作…

作者头像 李华