用python解决:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按任意顺序返回答案。
时间: 2024-01-30 16:42:48 浏览: 84
我们可以使用异或运算来解决这个问题。我们知道,相同的数进行异或运算会得到0,所以我们可以将所有的数进行异或运算,最终得到的结果就是只出现一次的两个数进行异或运算的结果。
由于这两个数不同,所以异或结果中至少有一个二进制位是1,我们可以找到这个二进制位,然后根据这个二进制位将原数组分成两个子数组,每个子数组中包含一个只出现一次的数和其他数。
然后对这两个子数组分别进行异或运算,最终得到的结果就是只出现一次的那两个数。
下面是代码实现:
```python
def findSingleNumbers(nums):
# 对所有数进行异或运算
xor = 0
for num in nums:
xor ^= num
# 找到异或结果中最低位的1
mask = 1
while xor & mask == 0:
mask <<= 1
# 根据最低位的1将原数组分成两个子数组
a, b = 0, 0
for num in nums:
if num & mask:
a ^= num
else:
b ^= num
return [a, b]
```
我们可以测试一下这个函数:
```python
nums = [1, 2, 1, 3, 2, 5]
print(findSingleNumbers(nums))
```
输出结果为:
```
[3, 5]
```
阅读全文