【问题标题】:Given an array of integers, where every number appears thrice except one number appears twice, find the number that appears twice?给定一个整数数组,其中每个数字出现三次,除了一个数字出现两次,找到出现两次的数字?
【发布时间】:2017-07-26 19:34:05
【问题描述】:
这是“编程面试要素”中的一个问题。我看到这个问题发布了here,但接受的答案(或其他答案)不完整。
使用适用于 base 3 系统(在帖子中称为 xor3)的类似 XOR 的操作,您会得到 x xor3 x 的结果。但是,问题是要获得x。 xor3 定义为模 3 加法(其中数字以 3 为基数表示)
我们如何从x xor3 x 中取出x 部分?
【问题讨论】:
标签:
arrays
duplicates
operators
bitwise-operators
xor
【解决方案1】:
如果您再次遍历数字数组会怎样?假设您在第一次迭代后拥有的值是 a = x xor3 x
遍历数组中的所有条目,xor3 每个值都带有a。
for y in arr:
if y xor3 a == 0:
print y
break
else
continue
目前我认为这是一个幼稚的解决方案。考虑到每个 xor3 为 O(1) 和 O(1) 内存,这仍然是 O(n)。