- LeetCode-Problem136-异或-去除重复神器
- 主要难点在使用常数空间实现;对于需要在无形中抵消重复数的问题,异或是个利器;异或(此处用⊕表示)三大特点如下,对任意数值a
- a⊕0=a
- a⊕a=0
- a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b, 即满足交换律和结合律
- 所以解法是:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# 使用异或:用于处理需要相同数值自动抵消的问题
# a^0=a AND a^a=0 AND a^b^a=a^a^b=b
# Ans1: return reduce(lambda x,y: x^y, nums)
res = 0
for x in nums:
res ^= x
return res