1
.问题描述
给定一个数组
a[]
,其中除了
2
个数,其他均出现
2
次,请找到不重复
的
2
个数并返回。
2
.问题示例
给出
a=[1
,
2
,
5
,
5
,
6
,
6]
,返回
[1
,
2]
,除
1
和
2
外其他数都出现
了
2
次,因此返回
[1
,
2]
。给出
a=[3
,
2
,
7
,
5
,
5
,
7]
,返回
[2
,
3]
,除
了
2
和
3
其他数都出现了
2
次,因此返回
[2
,
3]
。
3
.代码实现
##本题旨在将十进制数转化为二进制数来进行相应的按位与,按位异或运算
class Solution:
def thenumber(self,a):
ans = [0,0]
for i in a: ##列表中两个相同的数按位异或为零,
ans[0] = ans[0]^i ##这样可以找出列表中不重复的数按位异或的结果
c = 1
while c & ans[0] != c: ##先判断ans[0]是奇数还是偶数,奇数等于1且等于自身,否则0
c = c << 1
for i in a:
if i & c == c: ##c二进制有两种情况:01或者10
ans[1] = ans[1]^i
ans[0] = ans[1]^ans[0]
return ans
if __name__ == "__main__":
s = Solution()
nums = [3,2,7,5,5,7]
print(s.thenumber(nums))
4
.运行结果
输入:
[3,2,7,5,5,7]
输出:
[2, 3]