剑指offer 56. 数组中数字出现的次数

题目:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。  中等

方法:异或  时间复杂度O(n)  空间复杂度O(1) 

二进制数最右边的一  源码 & 补码(反码 + 1)

 

def singleNumbers(nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        x = y = xy = 0
        for num in nums:
            xy ^= num
        one = xy & (~xy + 1)
        for num in nums:
            if num & one:
                x ^= num
        y = xy ^ x
        return x,y

 

其他方法包括哈希表等不符合条件

 

posted @ 2022-07-23 15:25  Liang-ml  阅读(10)  评论(0)    收藏  举报