【发布时间】:2015-03-13 14:35:33
【问题描述】:
这有点与this 问题有关,但稍作调整。 我们得到一个包含 1 到 1000 之间整数的数组。 从 1 到 1000 的每个整数都在数组中一次,但一个在数组中两次。 (即我从列表中删除一个唯一元素并引入一个已经在列表中的重复元素,记住数组的大小仍然是 1000)
- 确定数组中的整数两次
- 你能在数组中只迭代一次吗?
在我发布的链接中,这是一个完全不同的问题。
我的解决方案:
对数组进行排序,然后查找两个元素是否在一起。 (平均情况 O(nlog(n)))
创建一个 1000 位的位数组(不会占用太多内存)。 0 存储在每个位字段中。遍历包含 1000 个元素的数组,并将位数组索引中的位符号翻转为数组的值。
即(如果数组的第 0 位存储的值是 548,我们将位数组中的第 548 位翻转为 1)。
已经翻转为 1 的字段为重复元素
Solution2 只对数组进行一次迭代。
现在,我正在阅读“望远镜系列”,我还没有完全理解它。但是那里(或在离散数学中)是否有一个概念,我们可以将一些东西相加并用其他东西减去以获得重复的数字?
【问题讨论】:
-
使用否定法或异或法
-
你为什么不满足stackoverflow.com/questions/2605766的第一个答案?您的第二个解决方案满足要求,但我认为不太优雅。
-
嗯,到底有什么不同?转折点在哪里?
-
1^2^...^1000^arr[0]^arr[1]^...^arr[1000]这行得通吗? :) -
我从列表中删除了一个唯一元素并引入了一个已经在列表中的重复元素,记住数组的大小仍然是 1000,而不是 1001)