只出现一次的数字用位运算法
时间: 2023-12-03 12:09:39 浏览: 91
数组中唯一只出现一次的数字.md
使用位运算法解决只出现一次的数字问题的具体步骤如下:
1. 对所有数字进行异或运算,得到结果值。
2. 找到结果值二进制表示中第一个为1的位,记为n。
3. 将所有数字按照第n位是否为1分为两组。
4. 对每组内的数字分别进行异或运算,得到两个结果值,分别为a和b。
5. a和b即为所求的两个只出现一次的数字。
Python代码实现如下:
```python
def find_single_number(nums):
# 对所有数字进行异或运算,得到结果值
result = 0
for num in nums:
result ^= num
# 找到结果值二进制表示中第一个为1的位,记为n
n = 0
while (result >> n) & 1 == 0:
n += 1
# 将所有数字按照第n位是否为1分为两组
a, b = 0, 0
for num in nums:
if (num >> n) & 1 == 0:
a ^= num
else:
b ^= num
# 对每组内的数字分别进行异或运算,得到两个结果值,分别为a和b
return a, b
```
示例:
对于数组 [1, 2, 2, 3, 3, 4, 4, 5, 5],只出现一次的数字为 1 和 5。
对于数组 [1, 1, 2, 2, 3, 3, 4, 4, 5],只出现一次的数字为 5 和 1。
对于数组 [1, 1, 2, 2, 3, 3, 4, 4, 5, 5],没有只出现一次的数字。
总结:
使用位运算法可以解决只出现一次的数字问题,时间复杂度为O(n),空间复杂度为O(1)。与哈希表法相比,位运算法不需要额外的存储空间,适用于空间有限的情况。
阅读全文