这是我前一段时间遇到过的一个有趣的问题,在解决它时遇到了一些麻烦。
存在一个大小 N 的未排序整数数组,其中包含数字 1,2 ..,N + M ,缺少 M 整数。事先知道 M 和 N 。编写算法以最有效的方式找到缺少的 M 整数。
我曾尝试将其映射到大小 N + M 的数组,以便 i th索引包含值为我,但这需要2次扫描(1次用于映射,1次用于查找 M 缺失的数字)。
我遇到的这本书提到了单一扫描解决方案是可能的,但我无法达到它。关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
您可以使用映射在数组顶部的双向链表来执行此操作。
position 1 2 3 4 5 6 ...
next 2 3 4 5 6 7 ...
prev 0 1 2 3 4 5 ...
在传递输入时,您将索引到与每个输入编号对应的位置,并更新链接列表以从链接列表中删除(跳过)该位置。在输入结束时,链表将仅包含未访问的位置。