版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/86595474
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
如果要求数组中只出现一次的一个数字,可以参考leetcode136. 只出现一次的数字。
这里有两个数,可以先求所有数的异或值;然后找到该值的第一个1所在的位置,也就是这两个数在该位一定不同;最后根据该位值的异同把所有数分成两组求解两个 数就行:
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
# 先求所有数字异或的值
tmp = 0
for num in array:
tmp = tmp^num
# 从后往前找到第一个1的位置,这两个数字在该位的值一定不相等
first_one = 0
while tmp&1 != 1: # 与运算
tmp = tmp >> 1
first_one += 1
# 把所有数分为在该位不相等的两组就可以得到两个不同的数了
a, b = 0, 0
for num in array:
if self.zero_one(num, first_one):
a = a^num
else:
b = b^num
return [a,b]
def zero_one(self, num, loc):
num = num >> loc
return num&1