思路:先将数组进行排序,让相同的数全都相邻。然后在依次进行异或。
若异或结果为0,则指针加2以跳过相同的数。
若异或结果为1,则找到了只出现一次的数,且一定是两个参与异或的数字中的第一个数,然后指针只需加1以跳过只出现一次的数;

特例;当只出现一次的数在排序后的数组末尾时,两个参与异或的数字中的第二个数才是我们要寻找的,拎出来特别处理即可。

时间复杂度:O(N)

# -*- coding:utf-8 -*-
class Solution:
    # 返回[a,b] 其中ab是出现一次的两个数字
    def FindNumsAppearOnce(self, array):
        # write code here
        array.sort()
        d = []
        i = 0
        while i+1 < len(array):
            if array[i]^array[i+1]:
                d.append(array[i])
                i += 1
            else:
                i += 2
        if array[-2]^array[-1]:    
            d.append(array[-1])
        return d