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)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1143814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频过滤器LAVFilters安装

https://github.com/Nevcairiel/LAVFilters/releases

AutoGLM-Phone-9B部署详解:FP16加速

AutoGLM-Phone-9B部署详解&#xff1a;FP16加速 1. AutoGLM-Phone-9B简介 AutoGLM-Phone-9B 是一款专为移动端优化的多模态大语言模型&#xff0c;融合视觉、语音与文本处理能力&#xff0c;支持在资源受限设备上高效推理。该模型基于 GLM 架构进行轻量化设计&#xff0c;参数…

AI助力XPOSED模块开发:自动生成Hook代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个XPOSED模块开发助手&#xff0c;能够根据用户描述的功能需求&#xff0c;自动生成对应的Hook代码框架。要求&#xff1a;1.支持输入自然语言描述如拦截微信消息并修改内容…

前端小白必看:八股文入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 制作一个面向新人的前端八股文学习应用&#xff0c;要求&#xff1a;1. 知识分级系统&#xff08;基础/进阶&#xff09;&#xff1b;2. 每个概念配备生活化比喻和动画演示&#x…

《无尽冬日》MOD开发实战:从脚本修改到功能实现

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个《无尽冬日》MOD脚本编辑器&#xff0c;功能包括&#xff1a;1. 解析游戏原始脚本结构&#xff1b;2. 可视化编辑NPC行为树&#xff1b;3. 添加自定义任务和对话选项&…

AutoGLM-Phone-9B实战案例:智能教育助手开发

AutoGLM-Phone-9B实战案例&#xff1a;智能教育助手开发 随着移动智能设备在教育领域的广泛应用&#xff0c;对轻量化、多模态AI模型的需求日益增长。传统大模型受限于计算资源和延迟问题&#xff0c;难以在移动端实现高效推理。AutoGLM-Phone-9B的出现为这一挑战提供了创新性…

AutoGLM-Phone-9B应用开发:智能家居控制系统

AutoGLM-Phone-9B应用开发&#xff1a;智能家居控制系统 随着边缘计算与终端智能的快速发展&#xff0c;轻量化多模态大模型正逐步成为智能设备的核心驱动力。在这一背景下&#xff0c;AutoGLM-Phone-9B 作为一款专为移动端和嵌入式场景设计的高效多模态语言模型&#xff0c;展…

基于微信小程序的家乡扶贫助农系统设计与实现-计算机毕业设计源码+LW文档

摘要 当前&#xff0c;由于人们生活水平的提高和思想观念的改变&#xff0c;然后随着经济全球化的背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;互联网技术也会涉及到各个领域&#xff0c;于是传统的管理方式对时间、地点的限制太多&#x…

彩票分析师必备:历史号码查询对比器实战指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个专为彩票分析设计的号码查询对比工具&#xff0c;功能包括&#xff1a;1.冷热号统计分析 2.号码遗漏值计算 3.奇偶、大小号分布统计 4.区间分布分析 5.自定义条件筛选 6.数…

零基础教程:手把手制作TELEGREAT中文包

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式TELEGREAT汉化学习应用&#xff0c;包含&#xff1a;1)分步视频教程 2)内置练习用的TELEGREAT演示版 3)实时错误检查 4)汉化成果即时预览 5)常见问题解答库。要求界…

小白也能懂:图解Win11关闭自动更新的5个简单步骤

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个面向新手的Windows 11更新设置向导工具&#xff0c;要求&#xff1a;1. 全图形化界面&#xff0c;无代码操作&#xff1b;2. 每个步骤配有动画演示和语音解说&#xff1b;…

AutoGLM-Phone-9B完整指南:多模态模型开发手册

AutoGLM-Phone-9B完整指南&#xff1a;多模态模型开发手册 随着移动智能设备对AI能力需求的不断增长&#xff0c;如何在资源受限的终端上部署高效、轻量且功能强大的多模态大模型成为关键挑战。AutoGLM-Phone-9B应运而生&#xff0c;作为一款专为移动端优化的多模态语言模型&a…

5分钟原型:基于LIBWEBKIT2GTK的简易浏览器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于LIBWEBKIT2GTK-4.1-0的极简浏览器原型&#xff0c;功能包括&#xff1a;1.基本页面加载 2.前进/后退导航 3.URL地址栏 4.开发者工具开关 5.响应式设计。使用GTK3WebKi…

传统vs现代:URI解码效率大比拼

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个性能对比工具&#xff1a;1. 实现手动URI解码函数&#xff08;使用字符串替换等方法&#xff09;&#xff1b;2. 与原生decodeURIComponent进行对比&#xff1b;3. 设计测…

5分钟快速验证:用快马AI同时部署10个JAVA版本

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建多版本JAVA沙箱环境&#xff1a;1. 同时安装JDK 8/11/17/21 2. 支持快速切换默认版本 3. 每个版本独立环境变量 4. 包含版本对比测试模板 5. 一键清理功能。要求可以通过Web界…

AutoGLM-Phone-9B技术解析:低功耗推理优化策略

AutoGLM-Phone-9B技术解析&#xff1a;低功耗推理优化策略 随着大模型在移动端的广泛应用&#xff0c;如何在资源受限设备上实现高效、低功耗的多模态推理成为关键挑战。AutoGLM-Phone-9B 正是在这一背景下推出的创新性解决方案。该模型不仅继承了 GLM 架构强大的语言理解能力…

51单片机蜂鸣器唱歌:为电子玩具注入声音活力

51单片机蜂鸣器唱歌&#xff1a;为电子玩具注入声音活力你有没有试过拆开一个会“唱歌”的生日贺卡&#xff1f;轻轻一按&#xff0c;熟悉的旋律就响了起来——简单、魔性&#xff0c;却让人会心一笑。其实&#xff0c;这背后的技术并不神秘&#xff0c;甚至你用一块几块钱的51…

5分钟用AI生成蓝色隐士网页版原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成蓝色隐士网页版原型&#xff0c;功能包括&#xff1a;1. 拖拽式界面设计&#xff1b;2. 自动代码生成&#xff1b;3. 实时预览&#xff1b;4. 一键分享。输入需求&#xf…

STM32与MAX485芯片接口电路及程序配置新手教程

STM32与MAX485通信实战&#xff1a;从电路设计到Modbus协议实现 你有没有遇到过这样的场景&#xff1f; 在工业现场&#xff0c;PLC要读取10个分布在车间各处的温湿度传感器数据。如果用RS232&#xff0c;拉一根线只能连一个设备&#xff0c;布线像蜘蛛网&#xff1b;换成CAN总…

AI如何帮你自动生成FreeFileSync同步脚本?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请开发一个FreeFileSync自动脚本生成器。用户输入源文件夹路径、目标文件夹路径、同步模式&#xff08;镜像/双向/更新&#xff09;等基本参数后&#xff0c;自动生成完整的FreeFi…