477. Total Hamming Distance

如题,要求数组的全部汉明距离。首先想到的解决思路是通过两重循环的方法分别解出不同的两个整数之间的汉明距离,然后求出总和,但是最后发现这种方法会导致超时。最后看了网上的答案,主要思路是分别求出所有整数的每个位的总汉明距离,然后相加。

那么问题就在于如何求出每个位的总汉明距离,方法分两步:

1、求出该位中有多少个1,假设为bitcount ;

2、假设数组长度为 n , 那么该位中为 0 的位个数为 n - bitcount , 因为等于1的位与等于 0 的位的汉明距离为 1, bitcount 个等于1的位与 1个等于0 的位的总汉明距离为 bitcount * 1 , 所以计算位的总汉明距离为 bitcount * (n - bitcount) 。

最后代码如下:

 1 class Solution {
 2     public int totalHammingDistance(int[] nums) {
 3         int sum = 0;
 4         
 5         for(int i = 0 ; i < 32 ; i++){
 6             int bitcount = 0;
 7             for(int j = 0 ; j < nums.length ; j++){
 8                 bitcount += ( nums[j] >> i) & 1;
 9             }
10             sum += bitcount*( nums.length - bitcount);
11         }
12         
13         return sum;
14     }
15 }

END

原文地址:https://www.cnblogs.com/sssysukww/p/8983941.html