477.汉明距离总和
作者:互联网
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
注意:
- 数组中元素的范围为从 0到 10^9。
- 数组的长度不超过 10^4。
int totalHammingDistance(int* nums, int numsSize){
int totalnum = 0;
int temp = 0;
for(char i = 0; i < 31; i++)
{
temp = 0;
for(int j = 0; j < numsSize; j++)
{
if((nums[j] >> i) == 0) continue;
temp += ((nums[j] >> i) & 1);
}
totalnum += temp * (numsSize - temp);
}
return totalnum;
}
思路:这题是汉明距离的变种,一般位运算的解题思路都是往一位一位算的方向走,这道题也是不例外。计算一个数组的汉明距离总和,可以先算每位的汉民距离,然后32位加起来,不过题目说明数组中元素的范围为从 0到 10^9,只需要计算31位即可。
也即是计算数组中的同一个位中的0和1的数量,然后两者相乘即可得到该位的汉明距离总和。
标签:numsSize,temp,int,距离,477,数组,汉明,总和 来源: https://blog.csdn.net/weixin_43425544/article/details/112094393