我对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)