R4-数与位篇
python
class Solution:
def totalHammingDistance(self, nums: List[int]) -> int:
#创建计数器
trie=Counter()
max_bit=len(bin(max(nums)))-2
ret=0
for i,num in enumerate(nums):
for j in range(max_bit):
#一位位地取出来
bit=(num>>j)&1
if bit:
ret+=i-trie[j]
trie[j]+=1
else:
ret+=trie[j]
return ret
ps:
counter的用法
python
from collections import Counter
# 初始化一个空的 Counter 对象
trie = Counter()
# 添加一些元素
trie.update(['a', 'b', 'a', 'c', 'b', 'a'])
# 查看每个元素的出现次数
print(trie) # 输出 Counter({'a': 3, 'b': 2, 'c': 1})
# 获取元素 'a' 的计数
print(trie['a']) # 输出 3
# 如果元素不存在,返回0
print(trie['d']) # 输出 0
# 添加更多元素
trie['a'] += 1 # 等同于 trie.update(['a'])
print(trie) # 输出 Counter({'a': 4, 'b': 2, 'c': 1})
# 获取出现次数最多的元素
print(trie.most_common(1)) # 输出 [('a', 4)]