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

派森 #P122. 峰值查找

描述

给定一个长度为n的列表nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 (1)峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于; (2)列表两个边界可以看成是最小,nums[0]=nums[-1]= −∞ (3)对于所有有效的 i 都有 nums[i] != nums[i + 1]。 

图片

 

样例

输入

2 4 1 2 7 8 4

输出

5

代码:

nums = []
s = input().split(' ')
for x in s:nums.append(float(x))
left, right = 0, len(nums) - 1
while left < right:mid = (left + right) // 2if nums[mid] > nums[mid + 1]:right = midelse:left = mid + 1
print(left)

代码解析:

  1. nums = []:定义一个空列表,用于存储输入的数字列表。
  2. s = input().split(' '):通过input()函数获取用户输入的一行字符串,并使用split(' ')方法将其拆分成一个字符串列表。默认情况下,split()方法使用空格作为分隔符来拆分字符串。
  3. for x in s::对字符串列表s进行迭代,将迭代的值依次赋给变量x。
  4. nums.append(float(x)):将字符串x转换为浮点数类型,并将其添加到nums列表中。
  5. left, right = 0, len(nums) - 1:同时为变量left和right赋初值。left表示当前搜索范围的左边界,初始为0;right表示当前搜索范围的右边界,初始为列表的最后一个索引。
  6. while left < right::当left小于right时,执行循环体内的代码。这表示搜索范围还没有缩小到只有一个元素。
  7. mid = (left + right) // 2:计算当前搜索范围的中间位置的索引。使用整数除法(//)确保mid是整数。
  8. if nums[mid] > nums[mid + 1]::比较mid位置上的元素值与其右边相邻元素的值。如果mid位置上的元素值大于右边相邻元素的值,说明峰值在mid的左边,将搜索范围缩小到[left, mid]。
  9. right = mid:将搜索范围的右边界更新为mid位置,因为nums[mid]已经不可能是峰值,可以排除掉。
  10. else::如果mid位置上的元素值小于或等于右边相邻元素的值,说明峰值在mid的右边,将搜索范围缩小到[mid+1, right]。
  11. left = mid + 1:将搜索范围的左边界更新为mid + 1,因为mid位置上的元素值已经被排除。
  12. print(left):打印最终得到的峰值的索引,即left的值。

利用了二分查找的思想来寻找峰值。通过不断缩小搜索范围,每次将搜索范围减半,直到找到峰值所在的位置。

http://www.lryc.cn/news/133938.html

相关文章:

  • 基础网络详解4--HTTP CookieSession 思考
  • 14. 利用Canvas自制时钟组件
  • 微信小程序使用云存储和Markdown开发页面
  • 【C++】运算符重载 | 赋值运算符重载
  • Python学习 -- 类对象从创建到常用函数
  • 数组分割(2023省蓝桥杯)n种讨论 JAVA
  • 很好的启用window10专业版系统自带的远程桌面
  • TCP定制协议,序列化和反序列化
  • YOLOX在启智AI GPU/CPU平台部署笔记
  • 23种设计模式攻关
  • 【jsthreeJS】入门three,并实现3D汽车展示厅,附带全码
  • unity将结构体/列表与json字符串相互转化
  • 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程
  • 【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)
  • MATLAB算法实战应用案例精讲-【深度学习】模型压缩
  • Matlab使用
  • BladeX多数据源配置
  • go里面关于超时的设计
  • Qt下使用ModbusTcp通信协议进行PLC线圈/保持寄存器的读写(32位有符号数)
  • ElasticSearch学习2
  • 3D角色展示
  • 前端面试:【Angular】打造强大Web应用的全栈框架
  • 数据结构:栈和队列
  • SpringCloud Gateway服务网关的介绍与使用
  • 深入解析:如何打造高效的直播视频美颜SDK
  • 每日一博 - MPP(Massively Parallel Processing,大规模并行处理)架构
  • ssh框架原理及流程
  • eslint 配置和用法
  • 字符设备驱动实例(PWM和RTC)
  • Ribbon 源码分析