网易首页 > 网易号 > 正文 申请入驻

开课吧JavaScript深入简出系列教程2022最新卷起千堆雪

0
分享至

发现了二分搜索法的秘密。
1.1.原理分析

开课吧JavaScript深入简出系列教程2022最新卷起千堆雪

download:https://www.51xuebc.com/thread-495-1-1.html

二分搜索法是一个非常简单易懂的快速搜索算法,其思想在生活中随处可见。例如,当朋友聚在一起时,他们喜欢玩猜谜游戏。我随机写一个0到100之间的数字,然后大家依次猜。在猜的过程中,我会告诉你你是猜大还是猜小,直到有人猜对,被猜的人会有一些惩罚措施。
这个过程实际上是二分搜索法思想的一种体现。
回到实际的开发场景,假设有10个订单,它们的金额分别是:6,12,15,19,24,26,29,35,46,67。请查找订单金额为15的订单。利用二分搜索法的思想,我们每次都将大小与区间中间的数据进行比较,以缩小搜索范围。
下图表示查找的过程,其中left,right表示要查找的区间的下标,mid表示要查找的区间的中间元素的下标(如果范围区间为偶数,则选择较小的一个)。

通过这个搜索过程,我们可以总结出二分搜索法的思路:二分搜索法针对的是一个有序的数据集,搜索思路有点类似于各个击破的思路。每次通过与区间的中间元素进行比较,将待搜索的区间缩小到前一个的一半,直到找到待搜索的元素或者区间缩小到0。
1.2、复杂性分析
理解了二分搜索法的思想之后,让我们来分析一下二分搜索法的时间复杂性。首先,我们要明确一点,二分搜索法是一种非常高效的搜索算法。通过分析它的时间复杂度可以发现,我们假设数据大小为N,每次搜索后,数据大小会减少到原来的一半,直到最后数据大小减少到1。如果我们用数据来描述它的变化规律,那就是:
n,n/2,n/4,n/8,n/16,n/32,.......................,1;
你可以看到,这是一个几何级数。当数据大小变为1:
k的值是总还原次数。但是,每个缩小操作只涉及两个数据的大小比较。因此,在K个区间缩小操作后,通过计算K的值,我们可以得到二分搜索法的时间复杂度为O(logn)
这是一个非常高效的时间复杂度,有时甚至比O(1)复杂度还要高效。为什么这么说?对于log n,即使n很大,log n对应的值也会很小。我们之前研究O(1)复杂度的时候说过,O(1)代表一个恒定的复杂度水平,并不是说代码只需要执行一次,有时候可能要执行100次,这个恒定水平的1000倍的复杂度可以用O(1)来表示。因此,恒定时间复杂度的算法有时可能不具有O(logn)。
1.3、代码实现
二分搜索法有两种实现方式,一种是基于循环的,另一种是基于递归的。现在,给出这两种方式编写的代码模板。
1.基于循环的二分搜索法码模板
//返回数组中元素的下标
public int binary search(int[]array,int target) {
int left = 0,right = array.length - 1,mid
同时(左
// mid =(左+右)> > 1
mid = left +((右-左)> > 1);
if (array[mid] == target) {
返回mid
} else if (array[mid] > target) {
右=中1;
}否则{
左=中+1;
}
}
return-1;
}
复制代码

使用mid不断接近我们的目标值。在比较好的情况下,我们直接在某个段落中间找到目标值。最坏的情况,我们不断逼近,最后left==right找到目标值。当然,如果真的找不到目标值,也就是左>右的时候。
2.基于递归的二分搜索法码模板
public int recurBinarySearch(int[]array,int target,int left,int right) {
//终端
如果(左>右){
return-1;
}
//处理当前计算中间元素的下标。
int mid = left +((右-左)> > 1);
if (array[mid] == target) {
返回mid
}else if (array[mid] > target) {
//深入查看
返回recurBinarySearch(array,target,left,mid-1);
}否则{
返回recurBinarySearch(数组,目标,mid+1,右);
}
}
复制代码
高级:二分搜索法的实现可以分为两类。
1、简单实现有序序列中没有重复元素;
2.有序序列中重复元素的变形实现,
对于第一个,上面已经给出了代码模板。对于第二种情况,在实际应用场景中可能会出现以下情况:
2.1.从数据序列中找出其值等于给定值的第一个元素,例如,在{6,12,15,19,24,26,29,29,67}中找出第一个等于29的元素。
2.2.从数据序列中找出最后一个值等于给定值的元素。或者只是元素序列,找到最后一个等于29的元素。
2.3.从数据序列中查找大于或等于给定值的第一个元素。
2.4.从数据序列中找出最后一个值小于或等于给定值的元素。
课后思考:针对这四种情况,代码应该如何实现?
1.4.应用场景描述
二分搜索法的时间复杂度为O(log n),效率非常高。这是否意味着二分搜索法可以在所有情况下使用?让我们讨论一下二分搜索法的应用前提。
1.要搜索的数据序列必须是有序的。
二分搜索法对这个要求很严格,要搜索的数据序列必须是有序的(单调递增或单调递减)。如果数据是无序的,那么我们就要先排序,然后二进制搜索。如果我们针对的是一组固定的静态数据,也就是说数据序列不会被插入或删除,那么我们可以先对其进行排序,然后进行二进制搜索,这样就可以一次排序,多次搜索。但是如果数据序列本身不是固定不变的静态的,可能会涉及到数据序列的插入和删除,那么我们每次搜索之前都需要排序,这样成本就很高。
2.数据存储依赖于阵列。
要搜索的数据序列需要数组存储,也就是说,它依赖于顺序存储结构。不能用其他结构来存储要搜索的数据序列吗?比如用链表存储,答案是不能接受的。根据我们之前实现的二分搜索法过程,二分搜索法算法需要按照下标、左、右、中、中来访问数据序列中的元素。数组根据下标访问元素的复杂度为O(1),而链表访问元素的时间复杂度为O(n)。因此,如果用链表来存储数据,二分搜索法的时间复杂度会变得很高。
3.数据序列有上限和下限。
数据有上下限,这样就可以找到中间点,这样就可以分成两部分。
4.数据太少或太多都不适合二分搜索法。
当数据量很小时,没有必要使用二分搜索法。使用循环遍历就足够了,因为二分搜索法只有在数据量大的时候才能显示出它的优势。但是,在某些情况下,即使数据量很小,也建议您使用二分搜索法。比如数据序列中的所有数据都是很长的字符串,比较起来会花费很多时间,所以要尽量减少比较的次数,这样有助于提高性能。
那么当数据量过大时,为什么不推荐二分搜索法呢?前面说过,二分搜索法的底层是依靠数组来存储要搜索的数据序列的,而数组的特点就是需要连续的内存空间。比如现在有1G的订单数据,如果存储在数组中就需要1G的连续内存。即使有2G的剩余内存空间,如果这个2G的内存空间是不连续的,就不能申请1G的数组空间,所以我们说数据太多不适合二分搜索法。
代码解释:
1:如果恰好找到一个mid^2 = x,可以直接在while循环中返回,
2:如果在while循环中还没找到,就好像x=8。让我们在[1,2,3,4]中寻找。while循环中的最后一个循环left == right == 3。我们只需要寻找k 2。
进阶:牛顿迭代法解决了这个问题!问题解决方案精选:leetcode-cn.com/problems/sq…
类似标题:367。有效完全平方数
类别解决方案{
public boolean is perfect square(int x){
//特殊判断
如果(x
返回true
}
long left=1,right = x>>1,mid = 0;
同时(左
mid =(左+右)> > 1;
if (mid * mid < x) {
左=中+1;
}else if (mid * mid > x) {
右=中1;
}否则{
返回true
}
}
返回false
}
}
复制代码
33.搜索旋转排序数组。
字节,Aauto快一点,百度最近面试问题,33。搜索旋转排序数组
两点发现变形问题。
思考要点:
1:二分法的条件:满足上下边界,下标可以得到数组存储,原数组单调递增。虽然旋转后整个数组不是单调的,但它的一半一定是单调递增的。
2.要实现log n的复杂度,必须对分,但不能简单套用二分法模板。我们需要先找出哪一半是单调的,确定目标是否在范围内。如果是,就在这部分找目标,如果不是,就找另一半。
53.查找旋转排序数组中的最小值。
网易,拼多多,今日头条面试题,153。在旋转排序数组中寻找最小值
利用二分搜索法,找出半有序数组[4,5,6,7,0,1,2]中间的无序度
74.搜索二维矩阵
新浪,爱奇艺,三星面试问题,74。搜索二维矩阵
解题思路:m×n的标准二元矩阵可以看作是m×n的有序数组。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
和陈梦秘密领证真相大白后,樊振东近况曝出,难怪会淡出国家队

和陈梦秘密领证真相大白后,樊振东近况曝出,难怪会淡出国家队

乐天闲聊
2026-06-19 18:04:07
特朗普突然情绪失控,当着众人的面大声咆哮,中国是最后一根稻草

特朗普突然情绪失控,当着众人的面大声咆哮,中国是最后一根稻草

瓦伦西亚月亮
2026-07-02 12:04:23
166票赞成0票反对!韩投票结果出来了,李在明下令,向菲律宾派兵

166票赞成0票反对!韩投票结果出来了,李在明下令,向菲律宾派兵

墨子翟的日记y
2026-07-02 14:48:42
与俄决战在即,欧洲突收噩耗,惊天大案有了结果,身边竟是白眼狼

与俄决战在即,欧洲突收噩耗,惊天大案有了结果,身边竟是白眼狼

小小科普员
2026-07-03 23:38:44
亮剑最强演员,愣是一个人演了三个角色,还没被观众认出来

亮剑最强演员,愣是一个人演了三个角色,还没被观众认出来

剧有梗
2026-05-14 07:02:30
李小冉是怎么做到“瘦而不柴”的?肉肉长得好乖,太纯欲了

李小冉是怎么做到“瘦而不柴”的?肉肉长得好乖,太纯欲了

木子爱娱乐大号
2026-07-02 21:12:52
夏天喝酒远离工业水啤,这4款国产啤酒零添加,好喝不贵麦芽精酿

夏天喝酒远离工业水啤,这4款国产啤酒零添加,好喝不贵麦芽精酿

涛哥美食汇
2026-07-01 08:58:21
残疾男子遭亲弟诱骗签下声明放弃继承房产,察觉被骗后与其协商无果,遂向法院提起诉讼,法院:原告占55%,其胞弟占45%

残疾男子遭亲弟诱骗签下声明放弃继承房产,察觉被骗后与其协商无果,遂向法院提起诉讼,法院:原告占55%,其胞弟占45%

潇湘晨报
2026-07-03 19:51:11
被韩红骂退赛的“造假歌手”孙浩,时隔多年硬刚发文:走个面道歉

被韩红骂退赛的“造假歌手”孙浩,时隔多年硬刚发文:走个面道歉

凛若秋霜
2026-07-02 23:53:25
机构:核心城市土拍热度不减,房地产调整有望进入尾声

机构:核心城市土拍热度不减,房地产调整有望进入尾声

财闻
2026-07-01 15:03:48
中国已经成为全球第一个集体拒接电话的国家

中国已经成为全球第一个集体拒接电话的国家

黯泉
2026-06-26 10:44:35
新总理立陶宛上去后,称不想和中国有关系,态度360度急转弯

新总理立陶宛上去后,称不想和中国有关系,态度360度急转弯

知法而形
2026-07-03 23:53:25
台媒曝75岁郭台铭被50岁中女勾引!女方离异带娃 颜值不及正室

台媒曝75岁郭台铭被50岁中女勾引!女方离异带娃 颜值不及正室

天天热点见闻
2026-06-29 18:56:43
投资980万!天津郊区网红餐饮园,为何开业火爆后迅速凉凉?

投资980万!天津郊区网红餐饮园,为何开业火爆后迅速凉凉?

黑哥讲现代史
2026-07-03 11:53:07
小姨子年入千万,我们很少联系,妻子出差刚走,她约我去她那吃饭

小姨子年入千万,我们很少联系,妻子出差刚走,她约我去她那吃饭

千秋文化
2026-07-03 19:33:22
80后罗栋,任长沙市副市长

80后罗栋,任长沙市副市长

中国青年报
2026-07-03 18:44:21
北京国安主帅透露两将缺席 坦言泰山队有很多出色球员

北京国安主帅透露两将缺席 坦言泰山队有很多出色球员

闪电新闻
2026-07-03 23:57:50
央视发文,高调宣布王楚钦新身份,与体育主播的恋情传闻早有真相

央视发文,高调宣布王楚钦新身份,与体育主播的恋情传闻早有真相

陈意小可爱
2026-07-04 00:36:35
这片竟然能过审,救市之作,真的来了

这片竟然能过审,救市之作,真的来了

闲人电影
2026-07-03 16:21:43
体操冠军吴柳芳回应擦边风波:还清外债 重拾体面

体操冠军吴柳芳回应擦边风波:还清外债 重拾体面

3DM游戏
2026-07-03 19:32:06
2026-07-04 02:28:49
言出法随
言出法随
关注我,带你了解更多法律知识
4文章数 12关注度
往期回顾 全部

科技要闻

万亿富豪马斯克 舍不得特斯拉员工敞开用AI

头条要闻

美媒询问中方是否接受霍尔木兹海峡收费 外交部回应

头条要闻

美媒询问中方是否接受霍尔木兹海峡收费 外交部回应

体育要闻

C罗穿已故队友若塔球衣谢场 眼中含泪

娱乐要闻

海来阿木孕期出轨指控掀起全网热议

财经要闻

千亿茶市场无赢家:澜沧巨亏 八马停"蹄"

汽车要闻

方程豹钛9内饰曝光 用上了长联屏设计/下半年上市

态度原创

数码
房产
教育
游戏
艺术

数码要闻

苹果摄像头版AirPods项目据称已被叫停

房产要闻

总裁空缺17个月、现金缺口超1000亿:金融局“局外人”入局万科

教育要闻

走出“虚假的乖”:家庭教育里,孩子的心理健康更重要

TES外战创造历史,被G2让二追三钉上耻辱柱!网友:脸都不要了

艺术要闻

OPPO研发总部地块易主,山子高科“双O”新方案曝光!

无障碍浏览 进入关怀版