一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请找出这两个只出现一次的数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # -*-coding:utf-8 -*- class Solution: def FindNumsAppearOnce(self, array): # 如果两个数相同,那么这两个数的异或操作就等于0 if len(array) < 2: return None twoNumXor = None for num in array: if twoNumXor == None: twoNumXor = num else: twoNumXor = twoNumXor ^ num count = 0 while twoNumXor % 2 == 0: twoNumXor = twoNumXor >> 1 count += 1 mask = 1 << count firstNum = None secondNum = None for num in array: if mask & num == 0: if firstNum == None: firstNum = num else: firstNum = firstNum ^ num else: if secondNum == None: secondNum = num else: secondNum = secondNum ^ num return firstNum, secondNum if __name__ == '__main__': array = [1, 2, 3, 1, 2, 3, 4, 7, 4, 8] s = Solution() print(s.FindNumsAppearOnce(array)) |
运行结果为:
1 | (8, 7) |