首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二分搜索说找到了0个数字?

二分搜索是一种在有序数组中查找目标元素的常用算法。它的原理是将数组分成两半,然后判断目标元素与中间元素的大小关系,从而确定目标元素可能在哪个半区,然后再在该半区进行递归搜索。

当二分搜索找到了0个数字时,意味着目标元素不在给定的有序数组中。这通常发生在以下情况下:

  1. 目标元素比数组中的最小元素还小,或者比数组中的最大元素还大。
  2. 数组为空,即没有任何元素。

对于这种情况,可以返回一个特定的值(例如-1或者null)来表示未找到目标元素。

在腾讯云中,可以利用二分搜索的概念来优化某些涉及到有序数据查询的业务场景,提高查询速度和效率。比如在数据库中建立索引,使用二分搜索算法来快速定位目标数据所在的位置,减少查询时间。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库 TencentDB:https://cloud.tencent.com/product/tencentdb
  • 腾讯云文档库:https://cloud.tencent.com/document/product/557

需要注意的是,以上仅为腾讯云相关产品的示例,实际选择产品应根据具体需求和情况进行评估和比较。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深度技术解析,为什么QQ音乐搜索体验做到了极致?

搜索”如何让用户更快,更准确的找到自己想要的音乐,这是我们今天要展开的命题。 晒数据 干货之前,先来看看市场上,音乐类产品的数据吧,这次选择排名前三的音乐类产品来做数据对比。...基于搜索的个性化 用户的主动搜索行为,隐藏了很明确的兴趣特征,毕竟搜索的成本还是较高的,基于这样的判断,活跃用户、启动次数最多,使用时长最长的QQ音乐在搜索上也最有发言权,在个性推荐系统可以说它做到了smart...QQ音乐在用户搜索的过程中做了几件事情: 判断用户输入的关键词是歌词,还是歌名,或者是歌曲类型 根据关键词分析,用户的搜索意图,是想找歌,还是想找专辑,或者是其他的 数据库检索到结果后,再根据意图识别的结论...几次实验后虾米和网易都表现不如意,最终放弃这个搜索功能。 后记 啰嗦完了技术性的产品分析,也点感性的。...作为音乐的“重度”用户,可以,每天打开音乐APP搜索我想听的音乐成为我上班路上、休息时间的必修课。注意,我的是“搜索”而不是“听”音乐。

2.7K40
  • 基础算法——二分(与你的女同学玩猜数字游戏)

    秋名山码民的主页 欢迎关注点赞收藏⭐️留言 作者水平很有限,如果发现错误,一定要及时告知作者 前言 由于有些读者朋友私聊我,希望出几期基础算法的讲解,kmp,dp,哈希,搜索,贪心等对初学者还是不太友好...彦祖,热巴你呢,快关注! 目录大致如下: 排序(十大排序)——已经讲过 高精度算法 从0->1入门双指针 前缀和 二分 位运算 区间合并 何为二分?...二分,字面意思就是一分为二,就为二分 我们用一个广为流传的故事——猜数字来引入二分 假如,你现在和你的女朋友玩一个游戏,猜数字给定一个范围0-100,你每次进行猜测,女朋友只能告诉你所猜数字是大了,...或者是小了,,你根据提示来进行下一步猜想,此刻聪明的彦祖应该会想到当猜50,大了,那你就猜25……反反复复其实这时你就已经用到了二分的思想 都告诉了你们这个游戏,那么我当然会考虑没有女朋友彭于晏的感受了...如果不存在则返回-1 二分: 本质是二分,而不是题目中的单调 当想找不满足性质的边界值(棕色区域的右边界值) 中间值 mid = (l+r+1)/2 if(check(mid))等于true

    46120

    二分查找解题模版与题型全面解析

    什么是二分查找 比二分查找更简单的算法,我能想到的只有 遍历枚举,的直白些,就是写 for 循环。...如果比中间元素要小,则需要去到前半部分区间用类似的方法再次查找,直到最后我们找到了,或者整个数组给分完了(没找到) 这样的话时间复杂度是 O(logn)。...题目分析 其实题目就是要最先出现的元素,在这种情况下,如果我们找到了元素,依旧不知道它是不是最先(小)的,但是我们知道答案肯定不在后面,肯定在这或者是之前,因此这种情况需要将尾指针往前移。...我的做法是用循环去做判断,如果二分中点元素的值和尾指针元素的值相同,那么我就会向后移动这个二分中点,如果发现移到某一点,这一点并不是尾指针,那么说明这个二分中点在前区间,如果移到了尾指针处,说明这个点在后区间...这里说明一点,这道题的最坏情况的时间复杂度会退化到 O(n) 的,也就是数组里面的元素全部相同,但是我们要的元素不在数组内,比如 [2,2,2,2,2,2,2],我们要的数是 1。

    89220

    二分查找算法学习总结

    74这个数字,当然了,我们用肉眼很容易判断最后一个就是74这个数字,一下就可以找到了。  ...比如我现在要74这个数字,那计算机就要先看索引0是不是这个数字,不是就再看索引1,还不是,显然在我的这个例子中,计算机要比较32次才能找到74这个数字。   那这个效率高不高呢?...2、算法描述 我们现在呢就128这个数字 前提: 有已排序数组 定义左边界 L、右边界 R,确定搜索范围: 首先我们要确定一个搜索的范围,这个范围一开始就是从0到31。...以此类推   次我们找到了128这个数字。我们一共比较了3次。 注:如果我们的左边界 L > 右边界R 时,表示没有找到,应结束循环。...,循环执行二分查找(3、4两步) 获取中间索引 M = Floor((L+R) /2) 中间索引的值 A[M] 与待搜索的值 T 进行比较 ① A[M] == T 表示找到,返回中间索引

    35520

    ChatGPT,为啥写二分搜索容易死循环?

    刚好最近听说了这么一句话,“90%程序员都写不对二分搜索”,那就整个二分搜索最常见的问题考考ChatGPT。 ---- 了不起:为什么写二分搜索容易死循环?...此外,当待搜索的数组不是有序时,也可能导致搜索结果不正确或死循环。如果你遇到了这个问题,可以仔细检查你的代码并尝试调试。可以使用打印语句或者调试器来寻找问题所在。...随后让它给出一个二分搜索的代码,也与搜索引擎提供基本一致,没有系统的对二分问题做出分类,以下了不起总结的普通二分和不等式二分,几乎涵盖了所有的二分问题的方法论。...一、普通二分搜索 普通的二分搜索,就不再赘述,属于基本功了,现在的大多数算法面试也基本不再问。...2.3 编码实战 一段有序的数组但是有重复数组,搜索出目标数字的index区间。

    53010

    python-初识二分法(一)

    目录 二分法 1、二分法核心图 2、二分法算法应用实例 二分法 1、二分法核心图 2、二分法算法应用实例 二分法是一种搜索效率比较高的算法,每次搜索会把范围缩小一半,最终获取到想要的结果 二分法基础运用...break '''这个猜数字游戏,很好的运用了二分法的思想, 如果猜大了,那么就把输入的值当做范围的上限, 如果猜小了,那么就把输入值当做范围的下限''' 实例2如下: # 用二分法在列表搜索值...middle_index = len(l) // 2 # 判断中间索引对应的值比目标值大还是小 if target_num > l[middle_index]: # 说明要的元素只可能出现在列表的右侧...l_right) binary_target(target_num, l_right) elif target_num < l[middle_index]: # 说明要的元素只可能出现在列表的左侧...middle_index] print(l_left) binary_target(target_num, l_left) else: print('找到了

    23510

    ChatGPT,为啥写二分搜索容易死循环?

    刚好最近听说了这么一句话,“90%程序员都写不对二分搜索”,那就整个二分搜索最常见的问题考考ChatGPT。 ---- 了不起: 为什么写二分搜索容易死循环?...此外,当待搜索的数组不是有序时,也可能导致搜索结果不正确或死循环。 如果你遇到了这个问题,可以仔细检查你的代码并尝试调试。可以使用打印语句或者调试器来寻找问题所在。...随后让它给出一个二分搜索的代码,也与搜索引擎提供基本一致,没有系统的对二分问题做出分类,以下了不起总结的普通二分和不等式二分,几乎涵盖了所有的二分问题的方法论。...一、普通二分搜索 普通的二分搜索,就不再赘述,属于基本功了,现在的大多数算法面试也基本不再问。...2.3 编码实战 一段有序的数组但是有重复数组,搜索出目标数字的index区间。

    60100

    RNG输了,但我们不能输

    在我面过的公司里面,去哪儿、秒针、猎豹、作业帮等公司都考察了二分查找,去哪儿在实习和秋招都考察了二分查找。 对于一个简简单单的二分查找,你真的能完全写对吗?...越是面试中考察简单的东西,越需要花点心思去搞明白~ 概念介绍 什么是二分查找 维基百科 在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search...这种搜索算法每一次比较都使搜索范围缩小一半。...案例1 题目 去哪儿/一点咨讯 手写代码题: 对于一个排序数组,无重复数字,给定一个数target,如果这个数target存在,那么返回它出现的下标,如果不存在返回-1。...思路:递归的思路,就是每次每个节点的最小深度,最开始是去寻找叶子节点的最小深度,然后叶子节点的最小深度知道了以后,就得到了叶子节点的父亲节点的最小深度,这样一层层回溯的过程就把每个节点所代表的二叉树的最小深度知道了

    38220

    懵逼树上懵逼果:学习二分搜索

    一人一颗懵逼果, 一起学二分搜索。 数组、栈、队列、链表都是线性结构,树则是另外一种极其重要的数据结构。 树的种类有很多种,我们先从简单的 二分搜索树 开始树的学习。...二分查找法 二分查找法定义 是一种在有序数组中查找某一特定元素的搜索算法。...目标是搜索数字 5 首先,检查有序数列中心的数字,这里查找到时数字 4 4 与 将要搜索数字 5 进行比较,由于 4 小于 5,图中可以发现 5 在 4 的右边 这时,就不需要观察 4 左边的数字了,...置灰删除掉 检查剩余有序数列中心的数字,这时是 5 找到了这个数字 二叉查找树(Binary Search Tree)基础 二叉查找树也可叫做二分查找树。...核心思想:从根节点开始插入的位置,满足二叉搜索树的特性,比左子节点大,比右子节点小. 步骤: 从根节点开始,先比较当前节点,如果当前节点为null那么就插入到这个节点。

    74110

    二分查找不同模板分析与比较

    二分查找最简单的样子 二分查找最简单的样子是:在一个有序(升序) 整数 数组中查找一个 整数。...这道题是「力扣」第 704 题,思路是:找到一个位于搜索区间中间位置的一个元素 nums[mid]: 如果 nums[mid] 恰好等于 target,我们就可以到了目标元素; 如果 nums[mid...right = mid - 1; } } return -1; } } 为什么这是「二分查找」最简单的样子呢...怎么知道 mid 是不是解,下一轮向左边,还是向右边,答案是:看题目,重要的事情三遍,看题目、看题目、看题目。 所以这里还有一个小技巧:分析清楚题目要的元素需要符合什么性质。...我写的题解绝大多数都是这种写法,因为「力扣」上的问题绝大多数都是下面这类问题: (重要的事情三遍,这是本文第三次出现了) 如果当前猜的那个数 nums[mid] 符合某个性质,我们还不能确定它一定就是我们要的元素

    54820

    二分查找不同模板分析与比较

    ,就我的题解里面,网友朋友我写的代码是「左闭右闭」和「左闭右开」还展开了讨论。...这道题是「力扣」第 704 题,思路是:找到一个位于搜索区间中间位置的一个元素 nums[mid]: 如果 nums[mid] 恰好等于 target,我们就可以到了目标元素; 如果 nums[mid...right = mid - 1; } } return -1; } } 为什么这是「二分查找」最简单的样子呢...怎么知道 mid 是不是解,下一轮向左边,还是向右边,答案是:看题目,重要的事情三遍,看题目、看题目、看题目。 所以这里还有一个小技巧:分析清楚题目要的元素需要符合什么性质。...我写的题解绝大多数都是这种写法,因为「力扣」上的问题绝大多数都是下面这类问题: (重要的事情三遍,这是本文第三次出现了) 如果当前猜的那个数 nums[mid] 符合某个性质,我们还不能确定它一定就是我们要的元素

    81540

    【剑指offer:在排序数组中查找数字搜索左右边界:从两边向中间、二分查找

    题目描述:统计一个数字在排序数组中出现的次数。 这题要解决的核心问题就是:搜索数字出现的左右边界。边界的差值,就是出现次数。...解法 2: 二分查找(巧妙) 二分查找一般用来查找数字在有序数组中是否出现过。进一步想,它可以用来不断在子序列中搜索对应数字。...所以,我们就可以用它来向左边子序列中不断搜索,确认左边界;同样的思路,确认右边界。 这可能还是有点抽象,举个 ?。以数组 2、3、3、3、2 为例,我们要搜索数字 3 的左右边界。...假设我们先尝试搜索左边界下标 start。 按照二分法思路,arr[mid] = arr[2] = 3,更新 start 为 2,同时缩小搜索范围到 [0, mid - 1] = [0, 1]。...继续按照二分思路,搜索范围缩小到[1, 1],发现值为 3,更新 start 为 1。结束。 按同样方法,可以获得右边界下标 end。

    1.5K20

    面试手撕算法系列:二分

    二分法查找的思路如下: (1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。...,可以把复杂度从O(N)变成O(log N), 要满足二分搜索的条件是搜索区间内满足单调性 为什么会有两个模板呢 可以看到在区分id的时候可以分为mid=(l+r)/2和(l+r)/2+1 与此同时...这个题目使用二分法还是比较明显的 使用二分搜索平方根的思想很简单,就类似于小时候我们看的电视节目中的“猜价格”游戏,高了就往低了猜,低了就往高了猜,范围越来越小。...存在三种情况: 平方小于目标数 往高走 平方大于目标数 往低走 平方和恰好等于目标数 跳出循环 //采用二分模板 mid划到了左区间 long left=1; long right=x;...目标数还得往大 如果不是 那么说明1-x上有一个数是出现了两次 目标数得往小了 那么我们要找出这个引起质变的数即可 int n=nums.length; int l=0; int r=n-1

    53410

    算法学习---二分查找

    通常我们都会直接翻开字典中间打开位置看看是什么字母的,如果我们翻到了J,K在J后面,那么我们继续往后翻就到了,比从头开始翻快多了。 二分查找是一种算法,其输入是一个有序的元素列表(必须有序)。...再看一个简单的例子 如果我们现在在1到100里的数字99,如果我们重头开始查找,需要99步 如果我们用二分查找,50->75->88->94->97->99,6次就能查找,而且在这个范围里任何数字在7...比如简单查找一个含n个元素的列表,需要执行n次操作。而二分查找需要执行log(2)N次。 大O表示法指出在最糟糕的情况下的运行时间 简单查找的运行时间总是为O(n)。...查找Adit时,一次就找到了,这是最佳的情形,但大O表示法的是最糟的情形。因此,你可以,在最糟情况下,必须查看电话簿中的每个条目,对应的运行时间为O(n)。...二分查找的速度比简单查找快得多; 2. O(log n)比O(n)快。需要搜索的元素越多, 前者比后者就快得越多; 3. 算法运行时间并不以秒为单位; 4.

    27410

    【C语言】二分查找与冒泡排序

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 二分查找 在有序数组中查找具体的某个数字n,...可能有同学会说一个一个,但是这样的效率实在太低,特别是对于有序的数组,效率太低。...我们一般从中间元素开始,查一次去掉一半数字,这种方法我们给它取名为折半查找即为二分查找,效率大大提高!怎么理解呢?...在计算机科学中, 二分搜索 (英语:binary search),也称 折半搜索 (英语:half-interval search)、 对数搜索 (英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索...注意点:关键在于有序数组,也就是二分查找存在缺陷:不能在无序数组中使用,当然对于无序数组你也可以选择排一下序。

    99930

    算法学习:二分查找

    传统的做法是从头开始一本本地,但如果你知道书架上的书是按字母顺序排列的,聪明的做法是直接走到中间,如果目标书在中间就找到了,不在的话根据书名比较判断是在左边还是右边的书架继续寻找。...这是 简单查找,更准确的说法是傻。每次猜测都只能排除一个数字,在最糟糕的情况下需要100次才能够找到这个数字。...而二分查找直接从有序列表的中间开始,一次就将排除一半的数字: 随后再从剩下的数字(50-100)的中间数(75)进行判断,又将排除掉一半的数字: 随后再从数字(50-75)的中间数进行判断...,以此类推:找到最后的数: 也就是,100个元素的情况,使用二分查找最糟糕的情况也只需要7步就可以查找到相应的数字,比简单查找要少多了!...二分查找的时间复杂度 对于二分查找算法,每次迭代都将搜索区间减半,这意味着查找次数与输入数据的对数成正比。因此,二分查找的时间复杂度为O(log n)。

    7510

    C语言函数二分查找(折半查找)

    C语言函数二分查找(折半查找) 参考视频讲解哔哩哔哩比特鹏哥的视频 ——链接 二分查找 #include //二分查找 //在一个有序数组中查找具体的某个数 //如果找到了返回...,这个数的下标,找不到返回-1 //例如我要在这个数组中找到7 //首先找到这组被查找元素的中间的元素 //假如发现中间元素5要比我要的数要小 //说明我要的数在5的右边,这样我的范围就缩小了一半...//一直找到左右下标无法确定新的范围,他们之间没有元素可以被查找的时候,结束,说明没有找到 //如果在某一次查找的时候,找到了,下标相等了,说明找到了,把下标给过来 int number_search...\n"); } else { printf("找到了,下标是:%d\n",ret); } return 0; } //运行发现找不到结果——代码出现了问题 //自己问题的方法 //部分位置添加注释后...int right = sz - 1 ; //进入到这个循环中就是一次二分查找 //在这里要进行很多次 //每一次二分查找的第一步是被查找范围的中间元素的下标 while

    88120
    领券