思路:先将数组进行排序,让相同的数全都相邻。然后在依次进行异或。
若异或结果为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