思路:
可以用位运算实现,如果将所有数字相异或,则最后的结果肯定是那两个只出现一次的数字异或
的结果,所以根据异或的结果1所在的最低位,把数字分成两半,每一半里只有只出现一次的一个数据和成对出现的数据,然后将只出现一次的一个数据分别找出。
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
if len(array)<=0:
return []
num=self.xor(array)
i=0
for i in range(32):
if num&1==1:
break
else:
num=num>>1
num1=[]
num2=[]
for arr in array:
if self.bitis1(arr,i):
num1.append(arr)
else:
num2.append(arr)
first=self.xor(num1)
second=self.xor(num2)
return [first,second]
def xor(self,arr):
result=0
for i in arr:
result=result^i
return result
def bitis1(self,n,i):
n=n>>i
return n&1
python大法,但是时间久我觉得。
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
#tmp = set()
tmp = []
for a in array:
if a in tmp:
tmp.remove(a)
else:
tmp.append(a)
return tmp