56. 数组中只出现一次的数字
数组中只出现一次的数字
http://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811
- 将数组中的数字进行异或操作,则除了两个出现1次的数字外全变成0,得到x
- x中为1的位,是单独出现数a、b某位不同得到,即存在该位上一个为0,另一个必然为1
- x和-x进行与操作,可得到最低位的1
- 根据最低位1的不同,分成两组异或,可得单独出现的a、b
https://leetcode-cn.com/problems/single-number-iii/solution/fei-chang-rong-yi-li-jie-de-pythondai-ma-by-a-bai-/
class Solution: # 返回[a,b] 其中ab是出现一次的两个数字 def FindNumsAppearOnce(self, array): # write code here bitmask = 0 #找到唯二出现了一次的数字 for num in array: bitmask ^= num #找到区分两个数字的一位 diff = bitmask & (-bitmask) #找到这个位为1的数字 i = 0 for num in array: if num & diff : i ^= num return [i,i^bitmask]