【发布时间】:2012-06-11 00:03:39
【问题描述】:
我正在尝试为这个问题实现一个有效的解决方案,“假设在一个从 1 到 n 的未排序数组中,如何找到一个数字是否被删除以及如果 n 个数字被删除怎么办?”
让我说一下,我在编码方面没有任何问题,如果有人可以贡献我的基本想法,我就在这里。我想,将所有元素存储在哈希表中,索引是数字本身(即 hash(1)=1),然后从 1 到 n 检查哈希表是否存在值。这将花费 O(n) 时间。如果删除了多个数字,我当然建议这样做。对于 single 值,我将计算从 1 到 n 的 nums 总和并减去数组的总和。
但是对于删除的 n 数字,我可以添加什么来提高效率。 (如果涉及到 negative 数字,尽管我的解决方案是存储类似 (O(12)=12=-12) 的基本链接,但会自动将时间复杂度增加到 O(2n)。这个问题实际上是我问这个问题的原因,但任何关于唯一积极因素的想法也可能有所帮助。)
【问题讨论】:
-
一个元素是微不足道的:对原始数组中的所有数字进行异或,然后在删除元素的数组中进行。最后对两个结果进行异或运算得到缺失的数字。线性时间,恒定的内存需求。
-
移除多个元素会怎样?
-
多个元素,嗯,一个不是微不足道的:P 我不认为我有一个解决方案 :)
-
如果 O(n) 解决方案是可以接受的,为什么不计算数组中的元素数量足以解决问题?
-
@user315052:问题不在于删除了多少元素,而是删除了哪些个数字。
标签: c++ performance algorithm data-structures