当前位置: 首页 > 面试题库 >

在排序列表中找到第一个“缺失”数字

曾弘扬
2023-03-14
问题内容

假设我有整数的连续范围[0, 1, 2, 4, 6],其中in
3是第一个“缺失”数字。我需要一种算法来找到第一个“洞”。由于范围非常大(可能包含2^32条目),因此效率很重要。数字范围存储在磁盘上;空间效率也是一个主要问题。

最佳的时间和空间效率最佳算法是什么?


问题答案:

使用二进制搜索。如果某个数字范围没有孔,那么该范围的结束和开始之间的差值也将是该范围内的条目数。

因此,您可以从整个数字列表开始,然后根据前半部分是否有间隔来切掉​​前半部分或后半部分。最终,您将到达一个范围,其中两个条目中间有一个孔。

这的时间复杂度是O(log N)。与线性扫描相反,线性扫描的最坏情况是O(N)



 类似资料:
  • 我正在做一个项目,所以我把我的问题简化为: 任何帮助都将不胜感激。

  • 问题内容: 我正在尝试将.NET DataTable序列化为JSON文件,然后将JSON文件反序列化为DataTable。我想很简单。 但是,我有一个表,3行3列,每个元素的类型都是double。如果第一行中的任何值为null,则当JSON.Net将json文件反序列化为DataTable对象时,第一行中为null的列的所有值都变为字符串。 需要明确的是,只有第一行的值为空时,才会发生这种情况。如

  • 问题内容: 嘿。我有一个很大的数组,我想找到第N个最大值。我可以简单地对数组进行排序,然后采用第N个元素,但是我只对一个元素感兴趣,因此可能有比对整个数组进行排序更好的方法… 问题答案: 排序至少需要O(nlogn)运行时间- 有非常有效的选择算法可以在线性时间内解决您的问题。 (有时是),它基于quicksort(递归分区)的思想,是一个很好的解决方案(请参阅伪代码的链接+另一个示例)。

  • 本文向大家介绍Java程序在两个列表中查找缺失值和附加值,包括了Java程序在两个列表中查找缺失值和附加值的使用技巧和注意事项,需要的朋友参考一下 要在两个列表中查找缺失值和附加值,Java程序如下所示: 示例 输出结果 一个名为Demo的类包含主函数,在其中创建了两个数组列表。使用add 函数将元素添加到两个数组列表中。循环用于遍历第一个数组列表,然后检查第二个数组列表是否包含第一个数组列表的元

  • 问题内容: 我正在寻找一种最有效的方法,根据序列中缺少的数字将数字列表分成较小的列表。例如,如果初始列表为: 该函数将产生: 要么 会导致: 问题答案: 旧Python文档中的Python 3版本代码: 每当关键函数更改其返回值时,itertools模块中的函数都会生成中断。诀窍在于,返回值是列表中的数字减去列表中元素的位置。当数字中有空格时,此差异会更改。 该功能来自operator模块,您必须

  • 问题内容: 如何以pythonic方式从排序列表中找到缺失的号码? 我看过这篇文章,但是有没有更有效的方法呢? 问题答案: 或者(使用AP系列公式的总和) 对于可能缺少多个数字的一​​般情况,可以制定O(n)方法。

  • 问题陈述:- 我想在每个k个列表中搜索单个元素。 显然,我可以单独对每个数组进行二分搜索,这将得到O(k log n),其中k是排序数组的数目。 我们能在O(k+logn)中做吗,其中k是排序数组的个数?我想可能有更好的方法,因为我们现在做了k次同样的搜索- 这有可能实现吗?谁能提供一个例子,这是如何工作的基础上我的例子?

  • 问题内容: 给你一个包含 1 到 n 的整数数组,但数组中从 1 到 n 的数字之一丢失了。您需要提供最佳解决方案来找到丢失的数字。数组中的数字不能重复。 例如: 问题答案: 使用公式 n=n*(n+1)/2 求 n 个数字的总和 查找给定数组中存在的元素的总和。 减法(n 个数字的总和 - 数组中存在的元素的总和)。 查找数组中缺失数字的Java程序: 当你运行上面的程序时,你会得到以下输出: