【java-海明距离】477. Total Hamming Distance

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

Now your job is to find the total Hamming distance between all pairs of the given numbers.

Example:
Input: 4, 14, 2

Output: 6

Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
showing the four bits relevant in this case). So the answer will be:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
Note:
Elements of the given array are in the range of 0 to 10^9
Length of the array will not exceed 10^4.

class Solution {
    public int totalHammingDistance(int[] nums) {
        int len=nums.length,countBits=0,totalSum=0;
        for(int i=0;i<32;i++){
            countBits=0;
            for(int j=0;j<len;j++)countBits+=(nums[j]>>i)&1;
            totalSum+=countBits*(len-countBits);
        }
        return totalSum;
    }
}

在这里插入图片描述
对于32位整数中每个1-32位的位置,计算数组中每个整数该位为1的数量。然后,如果数组中有n个整数,并且其中k个具有相同的位如1,而(n-k)个与k个不相同如0,则该位对总距离贡献k *(n-k)汉明距离。

猜你喜欢

转载自blog.csdn.net/Dong__Ni/article/details/107140056