两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
示例:
输入: 4, 14, 2
输出: 6
解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系) 所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14,
2) = 2 + 2 + 2 = 6. 注意:数组中元素的范围为从 0到 10^9。 数组的长度不超过 10^4。
public int totalHammingDistance(int[] nums) {
if (nums.length < 2) {
return 0;
}
int sum = 0;
//范围小于2的30次方,所以只需要对后30位计算
int count = 30;
while (count-- > 0) {
//逐位进行计算
int ones = 0;
for (int i = 0; i < nums.length; i++) {
//判断整个数组在该位上有多少个1
ones+=(nums[i] & 1);
nums[i] >>= 1;
}
//在这一位上的距离总和是出现1的次数*出现0的次数
sum += ones * (nums.length - ones);
}
return sum;
}
整个思想就是对整个数组元素,每次对其中1位进行计算,因为不同位之间不会相互影响,比双重循环整体判断更快