1. 异或的性质
# 性质一
0 ^ a = a
a ^ a = 0
# 性质二
a ^ b = b ^ a
a ^ b ^ c = (a ^ b) ^ c = a ^ (b ^ c)
2. 面试题
- 数组中有一个元素出现了奇数次,其他元素出现了偶数次,找出这这个元素。
example = [1, 2, 2, 3, 3, 3, 3]
res = 0
for i in example:
res ^= i
# res即为那个出现奇数次的数
print(res)
- 数组中有两个元素出现了奇数次,其他元素出现了偶数次,找出这两个元素。
example = [2, 2, 3, 3, 3, 5, 5, 5, 7, 7, 3, 8, 8, 8]
res = 0
rest = 0
for i in example:
res ^= i
# res 的结果为: a ^ b
# a 或 b 二进制形式中的某一位为 必为 1
# res_right为:a 或 b 中最右边的 1
res_right = res & (~res + 1)
for i in example:
if (res_right & i) == res_right:
rest ^= i
print(rest)
print(rest^res)