477. 汉明距离总和

Posted lgz0921

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了477. 汉明距离总和相关的知识,希望对你有一定的参考价值。

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

思路:

第一种方法:直接暴力,不解释了,思路和https://leetcode-cn.com/problems/hamming-distance/这个题是一样的,这个题的题解:https://blog.csdn.net/lgz0921/article/details/117327193

第二种方法:n个数拆解每一位,统计当前位有几个1假设有x个,则当前位对结果的贡献就是x*(n-x)。(2^30 = 1073741824 > 10^9)

上代码:

第一种方法(用java写的):

class Solution {
    public int totalHammingDistance(int[] nums) {
        int result = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                result += Integer.bitCount(nums[i] ^ nums[j]);
            }
        }
        return result;
    }
}

第二种方法(用kotlin写的):

class Solution {
    fun totalHammingDistance(nums: IntArray): Int {
        var result = 0
        for (i in 0 until 30) {
            var x = 0
            for (num in nums) {
                x += num shr i and 1
            }
            result += x * (nums.size - x)
        }
        return result
    }
}

以上是关于477. 汉明距离总和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 477 汉明距离总和[数学 异或] HERODING的LeetCode之路

477 Total Hamming Distance 汉明距离总和

477. 汉明距离总和

LeetCode 0477. 汉明距离总和

LeetCode 477 / 剑指 Offer 63 / 64 /65 / 66

477. Total Hamming Distance 总的汉明距离