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

【LeetCode题解】LeetCode 162. 寻找峰值

【题目链接】
162. 寻找峰值
【题目描述】
在这里插入图片描述
【题解】
峰值元素定义为严格大于左右相邻值的元素,且题目给定边界条件nums[−1]=nums[n]=−∞nums[-1] = nums[n] = -∞nums[1]=nums[n]=。这一条件至关重要:它保证了数组中至少存在一个峰值(即使数组严格递增,最后一个元素因右侧是−∞-∞成为峰值;严格递减则第一个元素因左侧是−∞-∞成为峰值)。

由于要求时间复杂度为O(logn)O(log n)O(logn),需用二分查找缩小区间。核心逻辑是:通过比较中间位置mmm和右侧邻居m+1m+1m+1的值,判断峰值的大致方向:

  • nums[m]>nums[m+1]nums[m] > nums[m+1]nums[m]>nums[m+1]
    说明mmm处于下坡段(或本身是峰值)。由于左侧边界是−∞-∞,从mmm向左必然存在一个峰值(即使左侧一直递减,最左端因左侧是−∞-∞也会成为峰值)。因此,缩小右边界到mmm
  • nums[m]<nums[m+1]nums[m] < nums[m+1]nums[m]<nums[m+1]
    说明mmm处于上坡段。由于右侧边界是−∞-∞,从m+1m+1m+1向右必然存在一个峰值(即使右侧一直递增,最右端因右侧是−∞-∞也会成为峰值)。因此,缩小左边界到m+1m+1m+1
    【AC代码】
class Solution {
public:int findPeakElement(vector<int>& nums) {int l = 0, r = nums.size() - 1;while(l < r) {int mid = l + r >> 1;if(nums[mid] > nums[mid + 1])r = mid;elsel = mid + 1;}return l;}
};

【思考&收获】
二分算法的两类模板需要熟练掌握,但核心关键在于设计合理的checkcheckcheck函数,它直接定义了“如何根据中间位置的特征,判断下一阶段的搜索方向”。由于每道题的场景逻辑不同,真正的破题点永远是 结合问题条件,分析区间的“可二分性”,而非机械套用模板。

http://www.dtcms.com/a/338530.html

相关文章:

  • 什么是矩阵系统源码搭建定制化开发,支持OEM贴牌
  • AndroidR车机系统Settings数据库增加非持久化存储键值方案-续
  • 快手可灵招海外产品运营实习生
  • vue,H5车牌弹框定制键盘包括新能源车牌
  • word如何转换为pdf
  • 网络基础——Socket编程预备
  • 专题:2025母婴行业消费洞察与分龄营养趋势报告|附40 +份报告PDF、交互图表数据汇总下载
  • MongoDB知识速查
  • uni-app页面使用u-view组件简化版列表页+详情页实现
  • 【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程
  • Selenium自动化测试入门:cookie处理
  • C语言实战:从零开始编写一个通用配置文件解析器
  • Docker+Nginx+Node.js实战教程:从零搭建高可用的前后端分离项目
  • 阿里云参数配置化
  • Apache Doris 4.0 AI 能力揭秘(一):AI 函数之 LLM 函数介绍
  • Python训练营打卡 DAY 41 简单CNN
  • Apache IoTDB 大版本升级记录(成熟的2.0.2版本)
  • 100202Title和Input组件_编辑器-react-仿低代码平台项目
  • AI 小游戏批量生产工厂(Deepseek深度推理reasoner模型64K tokens)
  • 如何计算 PCM 音频与 YUV/RGB 原始视频文件大小?
  • Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
  • 在相机空间中落地动作:以观察为中心的视觉-语言-行动策略
  • OpenHarmony之打造全场景智联基座的“分布式星链 ”WLAN子系统
  • 如何理解关系型数据库的ACID?
  • 【技术揭秘】AI Agent操作系统架构演进:从单体到分布式智能的跃迁
  • Android 数据可视化开发:从技术选型到性能优化
  • 在 Cursor 、 Vscode 中配置 SFTP 实现安全的手动文件上传
  • 利用解优化问题解欠定方程组
  • Redis缓存加速测试数据交互:从前缀键清理到前沿性能革命
  • OpenCV计算机视觉实战(20)——光流法运动分析