477. Total Hamming Distance

来源:互联网 发布:在ubuntu上下载软件 编辑:程序博客网 时间:2024/05/21 18:37

Related Topics:Bit Manipulation

一开始使用求两个数的汉明距离的思路,发现超时了,所以只能想新的方法。

int totalHammingDistance(vector<int>& nums) {
        int sum=0;
        for(int i=0;i<nums.size();i++){
            for(int j=i+1;j<nums.size();j++){
                sum+=hammingDistance(nums[i],nums[j]);
            }
        }
        return sum;
    }

    int hammingDistance(int x, int y) {
        int count=0;
        for(int i=0;i<32;i++){
            if(((x>>i)&1) != ((y>>i)&1)){
                count++;
            }
        }
        return count;
    }


百度了一下如何求多个数的汉明距离,思路是:在某一位上,如果有m个1,n个0,则在这一位上就会产生m*n个汉明距离,所以遍历所有的位数,汉明距离是每一位上汉明距离的总和。

class Solution {

public:
    int totalHammingDistance(vector<int>& nums) {
        int sum=0;
        for(int j=0;j<32;j++){
            int m=0,n=0;
            for(int i=0;i<nums.size();i++){
                if(((nums[i]>>j)&1)==1) m++;
                if(((nums[i]>>j)&1)==0) n++;
            }
            sum+=(m*n);
        }
        return sum;
    }

    
};