一尘不染

如何查找数组中唯一没有出现两次的数字

algorithm

以下是求职面试的内容:

在包含整数的给定数组中,每个数字都会重复一次,除了一个不会重复。编写一个查找不重复数字的函数。

我曾考虑过使用HashSet,但可能会使所有事情变得复杂…

有简单解决方案的想法吗?


阅读 217

收藏
2020-07-28

共1个答案

一尘不染

您可以定义一个初始化为0的整数“结果”,然后通过对数组中的所有元素应用XOR逻辑来进行一些按位运算。

最后,“结果”将等于仅出现一次的唯一元素。

result = 0
for i in array:
  result ^= i
return result

http://en.wikipedia.org/wiki/Bitwise_operation#XOR

例如,如果您的数组包含元素[3,4,5,3,4],则算法将返回

3 ^ 4 ^ 5 ^ 3 ^ 4

但是XOR运算符^是关联的和可交换的,因此结果也将等于:

(3 ^ 3)^(4 ^ 4)^ 5

因为对于任何整数i,i ^ i = 0,并且i ^ 0 = i,所以

(3 ^ 3)^(4 ^ 4)^ 5 = 0 ^ 0 ^ 5 = 5

2020-07-28