#136
Easy
位运算

Single Number

在其余数字都出现两次时,找出只出现一次的数字。

Bit Manipulation

题目定位

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 的交换律和结合律在这里关键?

继续刷相关题

先把 位运算 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 136. Single Number 题解思路 | Interview AiBox