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
to10^9
- Length of the array will not exceed
10^4
.
class Solution { public int totalHammingDistance(int[] nums) { int res = 0; int le = nums.length; for(int i = 0; i < 32; i++){ int cur1 = 0; for(int j = 0; j < nums.length; j++){ cur1 += ((nums[j]>>i) & 1); } res += (cur1) * (le - cur1); } return res; } }
经过观察发现,每一位的汉明距离,等于该位1的个数*0的个数
然后就32位,每一位都统计1的数量然后做一次计算,返回
总结:we know integer has totally 32 bits, and after reviewing the example we found for each digits, the distance == 0's * 1's, for example, at 1st digit, there are 2 0's and 3 1's, so for each 0 and 1 we count it as one distance, so totally we have 2*3 = 6 distance.
SO, for each digit, we calculate the number of 1's then 0's and multiply them and add together, we have the answer.