179. Leetcode 260. 只出现一次的数字 III (位运算-只出现一次的数字相关题目)

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        # 所有数异或
        x = 0
        for i in range(len(nums)):
            x = x ^ nums[i]

        # 由于两个出现一次的元素不相同,所以至少有一位为1,下面找到最低的那个1
        mask = 1
        while x & mask == 0:
            mask = mask << 1

        # 所有书根据mask=1或者0分成两组(两个特殊的数字被分成两组)
        a1, a2 = 0, 0
        for i in range(len(nums)):
            if nums[i] & mask == 0:
                a1 = a1 ^ nums[i]
            elif nums[i] & mask == mask:
                a2 = a2 ^ nums[i]

        return [a1,a2]

 


版权声明:本文为weixin_41362649原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。