分享好友 最新动态首页 最新动态分类 切换频道
算法——二分查找算法
2024-11-07 22:21

目录

算法——二分查找算法

1. 二分算法是什么

2. 朴素二分

朴素二分的模板

3. 查找左边界二分

查找左边界二分的模板

4. 查找右边界二分

查找右边界二分的模板

5. 小结

6. 应用实例

1. X的平方根

2. 搜索插入位置

3. 山脉数组的峰顶索引

4. 寻找峰值

5. 寻找旋转排序数组中的最小值

6. 点名


简单来说"二分"指的是将查找的区间一分为二,通过比较目标值与中间元素的大小关系,确定目标值可能在哪一半区间内,从而缩小查找范围。这个过程不断重复,每次都将当前区间二分,直到找到目标值或确定目标值不存在为止。这种分而治之的策略使得二分查找算法具有较高的效率,时间复杂度为O(log n)。

大致图解如下

即通过二段性,在每次判断过后可以一次性减少将近一半的数据,然后通过不断的挪移左右区间来筛选出最后的结果。

在这里我们通过一个例题来讲解:704. 二分查找 - 力扣(LeetCode

题目描述如下

看到这个题目之后我们首先想到的一定是暴力解法

从头遍历数组,将每个值与target比较,若遍历到结束还没有找到就返回-1, 否则返回对应下标

我们稍加分析可以发现这个解法的时间复杂度是O(N),我们没有使用到数组升序的性质,我们可以在暴力解法上稍作优化,修改为二分查找

定义左右指针left, right,然后计算中间值,将其与target比较,由于升序,若中间值小于target,则表明此时中间值及其左边的值均小于target,此时target理应存在于[mid+1, right],因此令left = mid+1; 若中间值大于target,则表明此时中间值及其右边的值均小于target, 此时target理应存在于[left, mid-1],因此令right = mid-1;相等时返回mid下标即可。

大致图解如下 

代码如下

 

在这里有两个值得关注的细节,其中一个是while循环的结束条件,在这里由于left与right的变化始终是在mid的基础上+1或-1,因此在left==right的时候,会因为边界的变化而导致退出循环,因此退出的条件是left > right;另一个是mid的计算方式,在计算mid时我们有两种计算方式:一种是mid = left + (right - left) / 2,另一种是mid = left + (right - left + 1) / 2,这两种方式在具体的过程中体现为

可以看到两种计算方式只有在数据个数为偶数时才会发生变化,意为分别取到中左与中右的下标。

模板如下

 

讲解 查找左边界二分与查找右边界二分 时,我们使用例题:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode

题目描述如下

简单分析后我们可以得出一个简单的暴力解法

从头到尾遍历一遍数组,使用begin与end分别标识一下这个元素第一次出现与最后一次出现的位置并返回,否则返回{-1, -1}

我们可以在此基础上优化

    定义左右指针left, right与标识符begin, end,寻找元素的第一次出现位置本质就是查找左边界,而寻找元素的最后一次出现位置本质就是查找右边界。

    在查找左边界时,计算出中间值并将其与target比较,如果中间值<target,说明左边界理应存在于[mid+1, right]区间中,因此left = mid+1,如果中间值>=target,说明左边界理应存在于[left, mid]区间中,因此right = mid

查找左边界图解如下

在查找左边界时,我们同样需要关注两个细节

1. while 循环的退出条件:在上面的查找过程中我们可以发现查找到最后left与right可能会指向同一个位置,此时如果使用while (left <= right)则会陷入死循环,因此退出条件为left>=right

2. 中点下标的选取方式:在朴素二分那里我们知道选取方式有两种,在这里我们选取左边中点,其图解如下

可以看到,如果选取右边的中点可能会导致死循环或下标进入不合理区间

因此我们可以得到查找左边界代码如下

 

模版如下

 

    在查找右边界时,计算出中间值并将其与target比较,如果中间值>target,说明右边界理应存在于[left, mid-1]区间中,因此right = mid-1,如果中间值<=target,说明右边界理应存在于[mid, right]区间中,因此left = mid

查找右边界图解如下

与查找左边界类似,我们同样需要关注两个细节

1. while 循环的退出条件:同上,在查找过程中我们可以发现查找到最后left与right可能会指向同一个位置,此时如果使用while (left <= right)则会陷入死循环,因此退出条件为left>=right

2. 中点下标的选取方式:在朴素二分那里我们知道选取方式有两种,在这里我们选取右边中点,其图解如下

可以看到,如果选取左边的中点可能会导致死循环或下标进入不合理区间

因此我们可以得到查找右边界代码如下

 

模板如下

 

解决问题完整代码如下

 

二分查找算法的细节比较多,但是当我们真正把它分析透彻后,我们仅需要结合理解背住模板,即

对于分类讨论的代码,我们具体情景具体实现

对于中点的选取,我们为了快捷可以记:分类讨论出现 -1 的时候上面就 +1 

题目链接:69. x 的平方根 - 力扣(LeetCode

解决思路:我们可以将从1到x的所有数的平方枚举出来,并将该平方数与x作比较,这就会天然的把所有平方数分成两个区间,分别是 当前数>=x 和 当前数<x 两个区间,这样就具有了二段性,即

结合模板我们可以得到如下代码

 

题目链接:35. 搜索插入位置 - 力扣(LeetCode

解析:根据示例1与示例2我们可以发现,目标索引左边的均<target,右边的均>=target,那么根据二段性有

我们就可以得到如下代码

 

题目链接:852. 山脉数组的峰顶索引 - 力扣(LeetCode

解析:根据题目我们可以知道,存在一个山顶它的左边均满足arr[mid] > arr[mid-1],它的右边均满足arr[mid] < arr[mid-1],因此它满足二段性,即

结合模板可以得到

 

题目链接:162. 寻找峰值 - 力扣(LeetCode

解析:这道题与上面的第三题类似,但是却又有些不同,由于这里是找到任意一个峰顶,因此我们还是可以如下分析

结合模板有

 

题目链接:153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode

解析:我们简要分析一下可以发现,这个数组整体呈现先上升,然后最低,再然后上升的趋势,由整个趋势我们可以看出,我们可以以最右边的数据做基准值,前一段上升趋势的数值均大于此基准值,而后一段上升趋势的数值均小于等于此基准值,即

结合模板有

 

同样的我们也可以使用第一个元素作为基准值,即

代码如下

 

题目链接:LCR 173. 点名 - 力扣(LeetCode

解析:我们稍加分析可以发现,在缺席的同学处之前mid==arr[mid],在缺席的同学之后mid>arr[mid],即

结合模板有

最新文章
2023-2029年中国脂肪醇行业市场竞争态势及发展趋向分析报告
脂肪醇是合成醇系表面活性剂的主要原料,按原料来源不同又分为合成醇和天然醇。由石油为原料制备合成醇的路线很多,但目前已在工业上形成大吨位生产的路线主要有三条:1.几基合成醇,该法在羰基化催化剂接触下,将烯烃和一氧化碳、氢气反应,
seo综合查询是啥意思(seo综合查询工具可以查看哪些数据)
SEO中有一个很重要的知识点就是要在页面中布局关键词,那么在布局关键词时,往往给出的要求是“查找用户爱搜索的词”,并进行布局。那么如何查找用户爱搜索的关键词呢?1.搜索引擎下拉框我们在搜索框中输入相应关键词时,系统往往会在下拉
AI智能脱口秀文案生成工具:一键打造爆笑子与幽默桥,全面满足创作需求
AI智能脱口秀文案生成工具:一键打造爆笑子与幽默桥,全面满足创作需求在信息时代飞速发展的今天人工智能已经渗透到咱们生活的方方面面甚至连幽默与创意也不例外。你是不是曾经为创作脱口秀子而头痛不已绞尽脑汁却依然无法捕捉到那些让人捧
1000个箭头(ai源文件,可编辑)在此,绘图必备!
免费资源:一、国自然类:1 2023历年国自然标书全文3国自然项目答辩PPT5标书写作模板7 国自然项目造假清单22018-24年国自然清单4 基金插图素材(可编辑)6 ‍近10年国自然标书全文‍二、SCI生信+实验类:1 160套SCI实验操作视频3Meta分析范
交通银行:启动新一代集团信息系统智慧化转型工程
  中国网财经8月16日讯 交通银行16日在银行业例行新闻发布会上介绍了该行加速推进信息技术智慧化转型的相关情况。交通银行副行长沈如军表示,日前,交通银行正式启动新一代集团信息系统智慧化转型工程(“新531”工程),目的是以打造数字
抖音短视频什么时间段发布最多人看?抖音流量时间段分析
三、注意事项其实,选择视频发布的时间对流量的影响虽然很重要,但是我们也不可忽视视频的内容质量,一个优质的视频可以轻松帮助我们登上热门。那如何产生优质的内容呢,我们可以从以下两点出发:1)素材来源 内容是重中之重。但是创造优质
11个帮助站长提升网站搜索引擎自然流量的SEO技巧
怎样提高你的百度搜索引擎提升专业技能?能够小范畴的试着一下这一明细里边的SEO专业技能,她们全是行得通并便于了解的百度搜索引擎提升专业技能。绝大多数的SEO专业技能明细都很模糊不清:对的…点“回到”按键。在本文中,大家将清除模棱
9月20日,百万美国人打算解救51区的外星Homie
美国最热话题是,一群哥们儿要抱团冲进美国神秘的军事基地51区,活捉外星人。什么叫51区,杰个话题都快被他吗说烂了,简单带你复习一下:美国政府储藏1947年罗斯威尔不明飞行物坠毁残骸和地外生物尸体的仓库,以及和外星人签订研究外星科技
2024流行的1一4多人游戏有哪些 好玩的多人游戏排行榜
多人游戏随着发展目前已经成为了众多游戏玩家们的圣地,这种游戏类型不仅仅只是注重玩家的个人技术,更是对玩家们的心理素质以及团队协作的终极挑战,2024流行的1一4多人游戏有哪些,介绍的游戏将会给玩家带来阵阵令人心跳加速的快感,同时
2005年以来国内成品油历次调价一览表
三次成品油定价机制改革自1998年迄今,中国已经历了三次成品油定价机制改革。1998年6月3日,原国家计委出台《原油成品油价格改革方案》,规定中石油和中石化两个集团公司之间原油交易结算价格由双方协商确定,价格由原油基准价和贴水两部分
相关文章
推荐文章
发表评论
0评