一、题目
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
二、思路
数字的每一位上的汉明距离和其他位不相关,只需统计出不同元素同一位的1的个数n,就可以制度这位的总共汉明距离:n*(nums.length - n)。
三、代码
class Solution {
public int totalHammingDistance(int[] nums) {
int[] memo = new int[32];
for (int num : nums) {
for (int i = 0; i < memo.length; i++) {
memo[i] += ((num >> i) & 1);
}
}
int ans = 0;
for (int i = 0; i < memo.length; i++) {
ans += memo[i]*(nums.length - memo[i]);
}
return ans;
}
}
空间复杂度位O(n),时间复杂度为O(32*n)。空间复杂度可以进行优化,此处不作优化。