每日一题力扣477汉明距离和

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。

计算一个数组中,任意两个数之间汉明距离的总和。

错解:

暴力超时

class Solution:
    def totalHammingDistance(self, nums: List[int]) -> int:
        s=0
        for i in nums:
            for j in nums:
                if i!=j:
                    a=bin(i^j).count('1')
                    s+=a
        return s//2

正解:

#每一位上1的个数乘以0的个数就是汉明距离。所以就遍历32位        
class Solution:
    def totalHammingDistance(self, nums: List[int]) -> int:
        n=len(nums)
        res=0
        for i in range(32):#遍历32位
            cnt1=0
            for num in nums:
                # 统计每个数第i位上1的个数
                cnt1+=1&(num>>i)#与运算,
            res+=cnt1*(n-cnt1)
        return res
原文地址:https://www.cnblogs.com/liuxiangyan/p/14512675.html