其他分享
首页 > 其他分享> > 477. 汉明距离总和

477. 汉明距离总和

作者:互联网

2021-05-28 LeetCode每日一题

链接:https://leetcode-cn.com/problems/total-hamming-distance/

标签:位运算

题目

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

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

输入: 4, 14, 2

输出: 6

解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

数组中元素的范围为从 0到 10^9。
数组的长度不超过 10^4。

解析

暴力破解,直接人没了。

在这里插入图片描述

所以不能暴力破解。观察规律

4   14   2
0 1 0 0   
1 1 1 0    
0 0 1 0
第一位有3个0
第二位有1个0和2个1
第三位有2个1和1个0
第四位有2个0和1个1
所以这三个数的汉明距离总和就是1 * 2 + 2 * 1 + 2 * 1 = 6
即等于所有位0和1个数相乘的总和

编码

class Solution {
    public int totalHammingDistance(int[] nums) {
        int res = 0, len = nums.length;
        for (int i = 0; i < 32; i++) {
            int[] count = new int[2];
            // 计算所有数的第i位有几个1和几个0
            for (int j = 0; j < len; j++) {
                count[((nums[j] >> i) & 1)]++;
            }

            res += (count[0] * count[1]);
        }
        
        return res;
    }
}

在这里插入图片描述

时间复杂度O(C * n),C为数的位数,这里为32,空间复杂度O(1)

标签:count,14,int,res,HammingDistance,477,汉明,总和
来源: https://blog.csdn.net/a_helloword/article/details/117375385