当前位置: 首页 > news >正文

leetcode 162 寻找峰值

一、题目描述

二、解题思路

(1)解法一:暴力法

数组只有三种情况,单调递增(顶峰为首位),单调递减(顶峰为最后一位),不单调(顶峰在中间),处理完边界条件后,利用循环可以找到第一个峰值,即为所求。

(2)解法二:二分法

具有“二段性”,可以使用二分法来解决这个问题。

如果nums[mid]<nums[mid+1],则mid+1到nums.size()-1的区间内一定有峰值,更新left=mid+1;

如果nums[mid]>nums[mid+1],则0到mid的区间内一定有峰值,更新right=mid;

三、代码实现

解法一:暴力法

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

class Solution {
public:int findPeakElement(vector<int>& nums) {//暴力法//边界处理if(nums.size()==1) return 0;if(nums[0]>nums[1]) return 0;if(nums[nums.size()-1]>nums[nums.size()-2]) return nums.size()-1;int i;for(i=1;i!=nums.size();i++){if(nums[i-1]>nums[i])break;}return i-1;}
};

解法二:二分法

时间复杂度:T(n)=O(log2)

空间复杂度:S(n)=O(1)

class Solution {
public:int findPeakElement(vector<int>& nums) {//二分法int left=0,right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]>nums[mid+1]) right=mid;else if(nums[mid]<nums[mid+1]) left=mid+1;}return left;}
};

http://www.xdnf.cn/news/1361269.html

相关文章:

  • Polkadot - JAM
  • 13种常见机器学习算法总结
  • 青少年软件编程(python六级)等级考试试卷-客观题(2023年3月)
  • 学习制作记录(选项UI以及存档系统)8.24
  • 基于RISC-V架构的国产MCU在eVTOL领域的应用研究与挑战分析
  • 【Ollama】本地OCR
  • 波兰密码破译机bomba:二战密码战的隐形功臣
  • Shell 循环实战:while 与 until 的趣味编程之旅
  • 3.4 磁盘存储器 (答案见原书 P194)
  • 【重学MySQL】八十八、8.0版本核心新特性全解析
  • Unity的Cursor.lockState
  • DeepSeek对采用nginx实现透传以解决OpenShift 4.x 私有数据中心和公有云混合部署一套集群的解答
  • 【SBP】Unity 打包构建管线原理解析于对比
  • 联想win11笔记本音频失效,显示差号(x)
  • 半年网络安全转型学习计划表(每天3小时)
  • 从成本中心到价值创造者:网络安全运维的实施框架与价值流转
  • VMware centos磁盘容量扩容教程
  • Windows 系统下 Android SDK 配置教程
  • 使用 Frida 运行时检测 Android 应用的真实权限状态 (App Ops)
  • 强逆光干扰漏检率↓78%!陌讯多模态融合算法在光伏巡检的实战优化
  • Java全栈开发面试实战:从基础到高并发场景的深度解析
  • Python性能优化实战(二):让循环跑得比博尔特还快
  • 27.编程思想
  • 【golang长途旅行第30站】channel管道------解决线程竞争的好手
  • Teams Bot机器人实时语音识别的多引擎的处理
  • TCP--执行Linux命令(虚拟xshell)
  • 数据建模怎么做?一文讲清数据建模全流程
  • 一、基因组选择(GS)与基因组预测(GP)
  • 网络安全转型书籍清单
  • 【Java开发日记】我们来讲一讲 Channel 和 FileChannel