​LeetCode刷题实战477:汉明距离总和

今天和大家聊的问题叫做 汉明距离总和,我们先来看题面:https://leetcode-cn.com/problems/total-hamming-distance/

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

Given an integer array nums, return the sum of Hamming distances between all the pairs of the integers in nums.

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。给你一个整数数组 nums,请你计算并返回 nums 中任意两个数之间 汉明距离的总和 。

示例                         

示例 1:
输入:nums = [4,14,2]
输出:6
解释:在二进制表示中,4 表示为 0100 ,14 表示为 1110 ,2表示为 0010 。(这样表示是为了体现后四位之间关系)
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6

示例 2:
输入:nums = [4,14,4]
输出:4

解题


对每一个数的相同位置的上的二进制位进行判断,统计是1的个数cnt,那么为0的个数就是nums.size()-cnt,那么该二进制位就会形成cnt*(nums.size()-cnt)的汉明距离。

class Solution {
public:
    int totalHammingDistance(vector<int>& nums) {
        int cnt,ans=0;
        for(int i=0;i<32;i++){
            cnt=0;
            for(int j=0;j<nums.size();j++){
                if(nums[j]&1){
                    cnt++;
                }
                nums[j]>>=1;
            }
            ans+=cnt*(nums.size()-cnt);
        }
        return ans;
    }
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上一篇:​LeetCode刷题实战486:预测赢家


下一篇:​LeetCode刷题实战475:供暖器