我对python还比较陌生,我使用此代码在列表中查找单个元素
代码如下:

def single_number(arr):
    ones, twos = 0, 0
    for x in arr:
        ones, twos = (ones ^ x) & ~twos, (ones & x) | (twos & ~x)
    assert twos == 0
    return ones
arr1 = [5, 3, 4, 3, 5, 5, 3]
print(single_number(arr1))

我就是不明白电话线在干什么
ones, twos = (ones ^ x) & ~twos, (ones & x) | (twos & ~x)
assert twos==0

最佳答案

你不会想这样做的,除非你真的是内存空间有限——即使那样,你可能也不应该使用它。
这是某种位移动/位操作的“魔力”,即
不直观
玩弄危险
维护不好
难以理解
Counter在o(n)中工作-这是检查列表中所有元素所能做的最好的方法-在您找到的这个位移位thingy上,它只需要更多的恒定时间(设置计数器对象)和一些空间(维护内部dict)。

def getSingle(arr):
    from collections import Counter
    c = Counter(arr)

    return c.most_common()[-1]  # return the least common one -> (key,amounts) tuple

arr1 = [5, 3, 4, 3, 5, 5, 3]

counter = getSingle(arr1)

print (f"{counter[0]} occured {counter[1]} time(s)")

输出:
4 occured 1 time(s)

09-20 02:28