题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路
常见的hashmap就不再赘述。
异或思路:
1、异或思想,一个数与自己异或为0,一个数与0异或为自己
2、由于其它数字两两相同,所以所有数异或则得到这两个不同数的异或结果。取这个结果的第一个1作为标志位
3、这个标志的1,必须是:这两个数在该位一个为0,一个为1
4、这样可以将数组分为两组,一组在该标志位为1,一组在该标志位为0,这两个不同数字分别在这两组内
5、将两组内的数分别异或,得到两个结果则为这两个不同的数
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
if not array:
return None
x=0
for i in array:
x^=i
count=0
while x&1!=1:
count+=1
x>>=1
one=[]
two=[]
for i in array:
if (i>>count)&1!=1:
one.append(i)
else:
two.append(i)
x1=0
x2=0
for i in one:
x1^=i
for i in two:
x2^=i
return x1,x2