例009 不重复的两个数
1.问题描述
给定一个数组a[],其中除了2个数,其他均出现2此,请找到不重复的两个数并返回。
2.问题示例
给出 a = [1,2,5,5,6,6]
返回 [1,2]
除1和2外其他数都出现了2次,因此返回[1,2]
给出 a = [3,2,7,5,5,7]
返回 [2,3]
除了2和3其他数都出现了2次,因此返回[2,3]
代码实现
方法1
def theTwoNumbers(a):
ans = [0,0]
for i in a:
ans[0] = ans[0] ^ i
c = 1
while c & ans[0] != c:
c = c<<1
for i in a:
if i & c == c:
ans[1] = ans[1]^i
ans[0] = ans[0]^ans[1]
return ans
a = [1,2,5,1]
print('输入:',a)
print('输出:',theTwoNumbers(a))
输入: [1, 2, 5, 1]
输出: [2, 5]
#=================================================================
# 由于题目是限定的两个数,所以次方法再只有一个重复数的时候会出现如下情况
a = [1,2,5,2,1]
print('输入:',a)
print('输出:',theTwoNumbers(a))
输入: [1, 2, 5, 2, 1]
输出: [0, 5]
方法2
def theTwoNumbers_2(arr):
arr = sorted(arr)
temp = []
output = []
for i in range(len(arr)-1):
if arr[i] == arr[i+1]:
temp.append(arr[i])
i += 1
for i in arr:
if i not in temp:
output.append(i)
return output
a = [1,2,5,1]
print('输入:',a)
print('输出:',theTwoNumbers_2(a))
输入: [1, 2, 5, 1]
输出: [2, 5]
#==========================================
a = [1,2,5,2,1]
print('输入:',a)
print('输出:',theTwoNumbers_2(a))
输入: [1, 2, 5, 2, 1]
输出: [5]