边工作边刷题:70天一遍leetcode: day 58-2

Single Number III

要点:这题和I一脉相承,从1个不同变成2个不同,其他数是配对。而II是三个重复
逻辑:因为全部数的xor值在其他两两相同值消掉之后,剩下2个异类的xor相当于二者的不同的位。这样可以根据最低不同位把2个不同数选出来:把其他数分成两组再按I的方法选。

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        xor = 0
        for n in nums:
            xor^=n
            
        bit = xor & ~(xor-1)
        xor1,xor2 = 0,0
        for n in nums:
            if n & bit:
                xor1^=n
            else:
                xor2^=n
        
        return [xor1, xor2]

posted @ 2016-06-15 04:51  absolute100  阅读(67)  评论(0编辑  收藏  举报