一尘不染

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

algorithm

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

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


阅读 246

收藏
2020-07-28

共1个答案

一尘不染

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

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

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

2020-07-28