【发布时间】:2016-10-28 11:49:35
【问题描述】:
如果我们有一个数组,其中包含在那里出现两次的数字和一个只出现一次的数字,我们可以使用 XOR 运算符来找到它,因为它遵循交流法则。例如
1 2 3 2 3
1 ^ 2 ^ 3 ^ 2 ^ 3 = ( 2 ^ 2 ) ^ ( 3 ^ 3 ) ^ 1 = 1
但是我们可以使用按位技巧来找到在数组中出现一次的数字,而其他数字可以出现 n 次,n > 1 吗?
【问题讨论】:
-
可以肯定的是,它只有在
n % 2 == 0时才有效。 -
@NathanOliver 是的,它们只有成对出现时才会相互抵消。这就像负数相乘:2、4 或 6 个负数得到一个正数,因为符号相互抵消。 3、5 或 7 个负数,每个都有一个“悬空”负数,用于最终输出。
标签: c++ arrays bitwise-operators