LeetCode 260.只出现一次的数字 III

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]

注意:
1、结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
2、你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        """
        1、计算a_xor_b
        2、取出a_xor_b中任意一位1,用flag_bit标记
        3、对flag_bit位为0和1的值分别在a_xor_b上进行异或运算
        4、不妨设 b在flag_bit位置的值为1,
            则a = a_xor_b ^ b ^(……),b = a_xor_b ^ a ^(……),括号内的异或运算为0
        """
        a_xor_b = 0
        for num in nums:
            a_xor_b = a_xor_b^num
        flag = 1
        while flag & a_xor_b ==0:
            flag = flag<<1
        a = b = a_xor_b
        for num in nums:
            if num & flag == 0 :
                a = a^num
            else:
                b = b^num
        return [a,b]

posted @ 2019-10-27 16:30  机器狗mo  阅读(87)  评论(0编辑  收藏  举报