其他分享
首页 > 其他分享> > 477.汉明距离总和

477.汉明距离总和

作者:互联网

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
注意:

  1. 数组中元素的范围为从 0到 10^9。
  2. 数组的长度不超过 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