这是[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数组吗?
由于 雷伊
答案 0 :(得分:2)
您的算法很有效。
它只能在空间复杂性方面得到改善。
即。而不是数组使用int
变量并设置相应的位
然后检查未设置哪个位。您找到了丢失的号码
答案 1 :(得分:0)
如果它几乎已排序,您可以在O(n)insertion sort中对其进行排序,然后在O(n)中找到第一个缺失的整数。