1. 将数组中的数字进行异或操作,则除了两个出现1次的数字外全变成0,得到x
  2. x中为1的位,是单独出现数a、b某位不同得到,即存在该位上一个为0,另一个必然为1
  3. x和-x进行与操作,可得到最低位的1
  4. 根据最低位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]