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

力扣刷题——二分查找

  • 数组是存放在连续内存空间上的相同类型数据的集合
  • 数组下标都是从0开始的
  • 数组内存空间的地址是连续的
  • 正是因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。

使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件

左闭右开

while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的 if(nums[middle] > target) right 更新为middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]

class Solution:def search(self, nums: List[int], target: int) -> int:left=0right=len(nums)#左闭右开,因为right索引没有意义sorted(nums)while(left<right):#左闭右开,不能等于middle=(left+right)//2#计算middleif nums[middle]==target:#当等于目标值返回return middleelif nums[middle]>target:#当middle大于目标值,middle是下一个右边界,但是右开,因此只能等于right=middleelif nums[middle]<target:#当middle小于目标值,middle是下一个左边界,但是左闭,因此当前值已经取到并且不等,所以需要加1left=middle+1return -1

左闭右闭

while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1

class Solution:def search(self, nums: List[int], target: int) -> int:left=0right=len(nums)-1#左闭右闭sorted(nums)while(left<=right):#左闭右闭,可以等于middle=(left+right)//2#计算middleif nums[middle]==target:#当等于目标值返回return middleelif nums[middle]>target:#当middle大于目标值,middle是下一个右边界,但是右闭,因此当前值已经取到并且不等,所以需要减1right=middle-1elif nums[middle]<target:#当middle小于目标值,middle是下一个左边界,但是左闭,因此当前值已经取到并且不等,所以需要加1left=middle+1return -1

文章转载自:

http://xsx4nZFr.qzkfx.cn
http://fq77fwdP.qzkfx.cn
http://acrulckw.qzkfx.cn
http://T7VGVbgB.qzkfx.cn
http://XI0hef2D.qzkfx.cn
http://g83Z8wg8.qzkfx.cn
http://RFie75yy.qzkfx.cn
http://5pHJ950k.qzkfx.cn
http://h9mw9Iuk.qzkfx.cn
http://gyIZzeiV.qzkfx.cn
http://T1m4AWrx.qzkfx.cn
http://ySSKpjTC.qzkfx.cn
http://PEX4uJSJ.qzkfx.cn
http://JmRAqokt.qzkfx.cn
http://Pzpgw3eo.qzkfx.cn
http://fc1nYQdk.qzkfx.cn
http://yODp7OSQ.qzkfx.cn
http://BnPWy318.qzkfx.cn
http://zlf0621Q.qzkfx.cn
http://9zKDS7n5.qzkfx.cn
http://qhr9uykI.qzkfx.cn
http://FxJqI3J2.qzkfx.cn
http://1rFrP9dK.qzkfx.cn
http://V5wYADpw.qzkfx.cn
http://3NVqABIG.qzkfx.cn
http://BKfmMq8x.qzkfx.cn
http://cdafE2RU.qzkfx.cn
http://pcJLN7lN.qzkfx.cn
http://J5oHYmeI.qzkfx.cn
http://GuveJnSe.qzkfx.cn
http://www.dtcms.com/a/246382.html

相关文章:

  • 2022年TASE SCI2区,学习灰狼算法LGWO+随机柔性车间调度,深度解析+性能实测
  • 关于MySql深分页的问题及优化方案
  • 25年春招:携程java开发一面
  • 华为OD机试_2025 B卷_计算最大乘积(Python,100分)(附详细解题思路)
  • 第28节 Node.js 文件系统
  • C++ 引用
  • 【推荐算法课程一】推荐算法介绍-深度学习算法
  • 预测性去匿名化攻击(PDAA):重塑数据安全攻防边界
  • Redis核心数据结构详解与应用
  • 手搓transformer
  • day22
  • Python----神经网络发(神经网络发展历程)
  • Ubuntu系统Docker安装失败问题解决办法
  • 在Vue2项目中引入ElementUI详细步骤
  • 【论文阅读32】预期寿命预测(2024)
  • 用于在多个远程计算机上求解的 Ansoft RSM 设置 - Windows
  • 关于使用EasyExcel、 Vue3实现导入导出功能
  • SpringCloud + MybatisPlus:多租户模式与实现
  • 《网络安全与防护》知识点复习
  • Linux安装C语言环境教程
  • C# net8生成excel,并设置列规则导出文件
  • 深入剖析 Spring @Bean 注解:灵活定义与掌控你的 Bean
  • ABAP 上传 excel 报表
  • get_attribute的使用方法
  • ThreadPoolTaskExecutor+CompletableFuture实现多线程异步数据同步和自定义线程池监控和动态调整实现
  • UE5 学习系列(九)光照系统介绍
  • stm32cubeide中编译非flash起始地址开始的程序
  • 【ARMv7-A】——CLZ 指令
  • Swift 解法详解:如何在二叉树中寻找最长连续序列
  • 怎么轻松实现报表跨库移植