题目定位
XOR 能天然抵消成对元素,因此只出现一次的数字会被完整保留下来。
关键观察
a ^ a = 0 且 a ^ 0 = a,因此顺序完全不重要。
目标复杂度
O(n) / O(1)
这题的解法思路怎么拆
1
XOR 能天然抵消成对元素,因此只出现一次的数字会被完整保留下来。
2
a ^ a = 0 且 a ^ 0 = a,因此顺序完全不重要。
3
先定义每一位的语义。
4
选一个最自然的位操作来更新该语义。
参考实现
Python# Generic pattern template
x & (x - 1) # clear lowest set bit
x & -x # isolate lowest set bit
x | (1 << i) # set bit i
x & ~(1 << i) # clear bit i
x ^ (1 << i) # toggle bit i
(x >> i) & 1 # read bit i
常见坑点
warning
明明 XOR 就够了,却上来写哈希表。
warning
写出来了,却解释不清为什么顺序无关。
高频追问
如果其他数字都出现三次,该怎么办?
为什么 XOR 的交换律和结合律在这里关键?
继续刷相关题
先把 位运算 这个模式刷成体系,再去做更难变体。