在列表中查找单个数字
在列表中查找单个数字
这个问题已经有了答案:
找到在其它数字都出现两次的一个列表中仅出现一次的数字,最好的算法是什么。
在整数的列表中(让我们把它看作一个数组),每个整数都恰好重复两次,除了一个。为了找到那个数字,最好的算法是什么。
admin 更改状态以发布 2023年5月21日
顺便说一句,您可以扩展这个想法,以在重复项列表中非常快地找到两个唯一的数字。让我们称唯一的数字为 a 和 b。首先,像 Kyle 建议的那样对所有内容进行异或运算。我们得到的是 a^b。我们知道 a^b != 0,因为 a != b。选择 a^b 中的任何 1 位,并将其用作掩码——更详细地说:选择 x 作为 2 的幂,使得 x &(a^b) 是非零值。现在将列表拆分为两个子列表——一个子列表包含 y & x == 0 的所有数字 y,其余数字放在另一个子列表中。通过我们选择的 x 的方式,我们知道 a 和 b 在不同的桶中。我们还知道每一对重复项仍在同一个桶中。因此,我们现在可以将 ye olde \"XOR-em-all\" 技巧分别应用于每个桶,并完全发现 a 和 b 是什么。砰。