从大小为n的数组中缺少m个整数

时间:2012-11-09 02:21:51

标签: algorithm

这是我前一段时间遇到过的一个有趣的问题,在解决它时遇到了一些麻烦。

  

存在一个大小 N 的未排序整数数组,其中包含数字 1,2 ..,N + M   ,缺少 M 整数。事先知道 M N 。编写算法以最有效的方式找到缺少的 M 整数。

我曾尝试将其映射到大小 N + M 的数组,以便 i th索引包含值为我,但这需要2次扫描(1次用于映射,1次用于查找 M 缺失的数字)。

我遇到的这本书提到了单一扫描解决方案是可能的,但我无法达到它。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以使用映射在数组顶部的双向链表来执行此操作。

position 1 2 3 4 5 6 ...
next     2 3 4 5 6 7 ...
prev     0 1 2 3 4 5 ...

在传递输入时,您将索引到与每个输入编号对应的位置,并更新链接列表以从链接列表中删除(跳过)该位置。在输入结束时,链表将仅包含未访问的位置。