以下是求职面试的内容:
在包含整数的给定数组中,每个数字都会重复一次,除了一个不会重复。编写一个查找不重复数字的函数。
我曾考虑过使用HashSet,但可能会使所有事情变得复杂…
有简单解决方案的想法吗?
您可以定义一个初始化为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