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

二分法心得

原教程见labuladong

首先,我们建议左右区间全部用闭区间。那么第一个搜索区间:left=0; right=len-1;

进入while循环,结束条件是right<left

然后求mid,如果nums[mid]的值比target大,说明target在左边,收缩搜索空间:right=mid-1。反之,target在右边,收缩搜索空间:left=mid+1

注意计算mid时,不要用mid=(left+right)/2,这样可能溢出,要用mid=left+(right-left)/2

以上是经典二分法查找。


但是如果要寻找左右边界呢?比如在排序数组中寻找某元素的左右边界。

这时外面的框架不变,还是闭区间,还是一样的循环结束条件。

但是里面的搜索条件变了。比如搜索左边界的话,我们的nums[mid]==target,这时我们需要往左收缩区间,也就是right=mid-1。其他两个条件不变,还是在寻找target。

所以他们最终会找不到target,最后一次是left=mid+1,也就是左边界的位置,返回left即可。

访问右边界是一样的原理。

这里注意,如果整个数组里就不存在target,target是一个很大的数,那么最终left=len,访问溢出了。所以要判断 left==len?。

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

相关文章:

  • Linux安装Docker完整教程
  • 备份基础知识
  • C++学习记录——팔 内存管理
  • Spring事务失效原因分析解决
  • 4个月的测试经验,来面试就开口要17K,面试完,我连5K都不想给他.....
  • python学习之pyecharts库的使用总结
  • 【taichi】利用 taichi 编写深度学习算子 —— 以提取右上三角阵为例
  • 二进制 k8s 集群下线 worker 组件流程分析和实践
  • Bean的六种作用域
  • Http发展历史
  • 高级Java程序员必备的技术点,你会了吗?
  • 【暴力量化】查找最优均线
  • Java读取mysql导入的文件时中文字段出现�??的乱码如何解决
  • k8s核心概念—Pod Controller Service介绍——20230213
  • Tensorflow的数学基础
  • IT培训就是“包就业”吗?内行人这么看
  • 【算法】【数组与矩阵模块】顺时针旋转打印矩阵
  • Java中的锁概述
  • 微电影行业痛点解决方案
  • 使用Spring框架的好处是什么
  • 【表格单元格可编辑】vue-elementul简单实现table表格点击单元格可编辑,点击单元格变成弹框修改数据
  • vue3.0 响应式数据
  • uni-app ①
  • 20个 Git 命令玩转版本控制
  • SAP NetWeaver版本和SAP Kernel版本的确定
  • 面试23K字节测试开发岗被血虐,到底具有怎样的技术才算高级水平?
  • 智云通CRM:买对了吗——大客户采购的方案实施
  • 前后端开发过程中的跨域问题总结
  • 爬虫:栖落的电影网站,利用requests和re模块
  • 使用burpsuite抓包 + sql工具注入 dvwa靶场