在整数列表中查找单个数字:不适用于负整数

时间:2014-04-02 21:28:57

标签: python-2.7

我有以下代码来查找列表中唯一的整数,该整数只出现一次,而所有其他整数出现3次。该代码适用于正整数,但有负整数的问题。

任何人都可以帮我解决这个问题吗?感谢。

class Solution:
    # @param A, a list of integer
    # @return an integer
    def singleNumber(self, A):
        if(A==None):
            return None
        else:
            s=[0]*32
            ans=0
            for i in range(len(s)):
                for j in A[:]:
                    if (j>>i)&1:
                        s[i] +=1
                s[i]=s[i]%3
                ans |= (s[i]<<i)
        return ans

2 个答案:

答案 0 :(得分:0)

collections.Counter对于此类事情非常有用,并且不会对负数进行扼杀。

>>> import collections
>>> l = [1, 1, 1, 2, 3, 3, 3, 4, 4, 4]
>>> c = collections.Counter(l).items()
>>> [k for k, v in c if v == 1][0]
2
>>> l = [-i for i in l]
>>> c = collections.Counter(l).items()
>>> [k for k, v in c if v == 1][0]
-2

答案 1 :(得分:0)

    def getSingle( arr, n):
        ones = 0
        twos = 0
        for i in range(0,n):
            twos  = twos | (ones & arr[i]);
            ones  = ones ^ arr[i];
            common_bit_mask = ~(ones & twos);
            ones = ones & common_bit_mask;
            twos = twos & common_bit_mask;
        return ones;

也适用于负数。

https://ideone.com/365Iie