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

[优选算法专题三.二分查找——NO.22寻找峰值]

题目链接

162. 寻找峰值

题目描述

题目解答

  • 功能:根据题目定义,峰值元素是指其值严格大于左右相邻值的元素。代码实现了一个时间复杂度为 O (log n) 的算法来查找数组中的峰值元素,若存在多个峰值,返回任意一个峰值的索引即可。
  • 代码逻辑
    • 初始化左右指针:int left = 0, right = nums.size() - 1;,将左指针left指向数组起始位置,右指针right指向数组末尾位置。
    • 二分查找循环:while (left < right),当left小于right时,循环继续,这保证了查找区间内至少有两个元素。
    • 计算中间位置:int mid = left + (right - left) / 2;,通过这种方式计算中间位置mid,可以避免(left + right)可能产生的整数溢出问题。
    • 调整查找区间:如果nums[mid] > nums[mid + 1],说明当前位置形成了一个 “下降趋势”,即mid左侧可能存在峰值,因此将右边界right移动到mid;否则,说明当前位置形成了一个 “上升趋势”,即mid右侧必定存在峰值,将左边界left移动到mid + 1
    • 返回结果:循环结束后,leftright会相遇,此时left指向的位置就是峰值元素的索引,故返回left

例如,对于数组[1, 2, 1, 3, 5, 6, 4],第一次二分mid指向2nums[mid]>nums[mid + 1]不成立,left更新为mid+13;第二次二分mid指向5nums[mid]>nums[mid + 1]成立,right更新为mid5;继续循环,最终leftright会都指向5,返回5,此时索引5对应的元素6就是峰值元素。

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

相关文章:

  • 中国建设银行官方网站下载北京企业做网站
  • [优选算法专题三.二分查找——NO.24搜索旋转排序数组中的最⼩值]
  • 微服务项目->在线oj系统(Java-Spring)--竞赛管理
  • 苏州市吴江太湖新城建设局网站网站模版建设教程
  • 【AI Design】如何利用 Paraflow 从创意到产品设计规范
  • 360免费建站网址是什么深圳网站推广哪家好
  • 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 进程概念
  • Spring AI alibaba 工具调用
  • 机器学习基础入门(第三篇):监督学习详解与经典算法
  • 做产品的淘宝客网站网站建设的素材处理方式
  • 【专业词典】FAST
  • 诸城网站建设wordpress退出维护
  • 预约记录自动关联功能测试
  • 进程“悄悄话”函数——`socketpair`
  • QT肝8天14--编辑用户
  • Redis Zset的底层秘密:跳表(Skip List)的精妙设计
  • 广州金融网站建设2017网站开发语言排名
  • C++ priority_queue优先级队列
  • Kafka 授权与 ACL 深入实践
  • 西宁市住房和城乡建设局网站做一个个人网站
  • 瑞安做网站多少钱东莞网站建设找谁
  • 谷歌云+Apache Airflow,数据处理自动化的强力武器
  • 小红书自动化运营:智能体+RPA自动化+MCP实现采集仿写和自动发布
  • 网站域名和网站网址建筑培训网 江苏
  • 定制开发开源AI智能名片S2B2C商城小程序的会员制运营研究——以“老铁用户”培养为核心目标
  • 【aigc】chrome-devtools-mcp怎么玩?
  • 从《Life of A Pixel》来看Chrome的渲染机制
  • 【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
  • Mac 安装Neo4j教程
  • blender 解决shift快捷键和中英切换重复的问题