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


京公网安备 11010502036488号