给你一个数组 nums
,数组中的数字 要么 出现一次,要么 出现两次。
请你返回数组中所有出现两次数字的按位XOR
值,如果没有数字出现过两次,返回 0 。
示例 1:
**输入:**nums = [1,2,1,3]
**输出:**1
解释:
nums
中唯一出现过两次的数字是 1 。
示例 2:
**输入:**nums = [1,2,3]
**输出:**0
解释:
nums
中没有数字出现两次。
示例 3:
**输入:**nums = [1,2,2,1]
**输出:**3
解释:
数字 1 和 2 出现过两次。1 XOR 2 == 3
。
python
from typing import List
class Solution:
def duplicateNumbersXOR(self, nums: List[int]) -> int:
time = 0 # 用于记录数字是否已经见过
ans = 0 # 用于记录重复出现的数字
for a in nums:
# 如果当前数字的状态已经被记录过,则说明这是一个重复数字
if time >> a & 1: #返回1就是属于,返回0不属于
ans ^= a #因为ans本身为零!
else:
# 将当前数字记录到 time 中
time |= 1 << a
return ans