解法一:python count内置函数
if array.count(i) == 1:
res.append(i)
解法二:hashmap,见总结篇博客
解法三:逻辑运算,利用异或,见总结篇博客。数同自己异或为0.分成两组,各组包含一个孤儿数(利用二进制第一个为1的位是否位1分为两组)
# -*- coding:utf-8 -*-
class Solution:
def FindNumsAppearOnce(self, array):
if not array:
return []
tmp = 0
for i in array:# 对array中的数字进行异或运算
tmp ^= i
idx = 0
while (tmp & 1) == 0:# 获取tmp中最低位1的位置
tmp >>= 1
idx += 1
a = b = 0
for i in array:
if self.isBit(i, idx):
a ^= i
else:
b ^= i
return [a, b]
def isBit(self, num, idx):# 判断num的二进制从低到高idx位是不是1
num = num >> idx
return num & 1