最小的非负数不在可能重复的数字列表中

时间:2012-01-23 10:08:23

标签: algorithm

这是[1]的变体。我有一个N(值N的数量已知)非负整数的列表。列表的上限是1024.列表中不存在的最小非负整数是什么?

例如,列表可能是0,3,6,2,4,1,8,0,9,0 - 那么输出必须是5.

我想这样做的方式 - 我知道列表的长度不会是> 1024.所以我有一个大小为1024的数组IFLAG - 我然后扫描N个数字 - 如果第i个数字是k,我设置IFLAG [k] = 1.我还保留列表中最高数字的选项卡,说MAX

在扫描列表中的所有N个数字之后,然后我将IFLAG从1扫描到(MAX + 1),并用0识别第一个位置。这是我要求的输出。

我必须反复这样做(数千甚至数百万次) - 所以,有没有更好的方法(可能)呢?我可以不使用IFLAG数组吗?

由于 雷伊

2 个答案:

答案 0 :(得分:2)

您的算法很有效。

它只能在空间复杂性方面得到改善。

即。而不是数组使用int变量并设置相应的位 然后检查未设置哪个位。您找到了丢失的号码

答案 1 :(得分:0)

如果它几乎已排序,您可以在O(n)insertion sort中对其进行排序,然后在O(n)中找到第一个缺失的整数。