C++汉明距离

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++汉明距离相关的知识,希望对你有一定的参考价值。

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:
输入:x = 1, y = 4
输出:2
解释:

示例 2:
输入:x = 3, y = 1
输出:1

思路

可以发现汉明距离实际上就是求 “比特位不同的值的数量,因此我们可以用异或的性质!!!”
x ^ y 返回的值中比特位为 1 的地方说明 xx 与 yy 在改比特位的值不同。因此题目可以转化为:
“求 x ^ y 中 1 的数量!”

如何计算 x ^ y 中 1 的数量?不停的丢弃最低为的 1,然后 increment ans.
就一点需要点明,对于二进制数 xx 如何丢弃最低位的比特值?
公式: xx = xx & (x-1x−1).

假设 x = 5
x = 0101
x-1 = 0100
x & (x-1) = 0101 & 0100 = 0100
可以发现5原本的最低位的 1 被移除了

class Solution 
public:
    int hammingDistance(int x, int y) 
        int res=x^y;
        int count=0;
        while(res)
            res&=(res-1);
            count++;
            //res--;  //这里不用res--,前面的res-1,相当于res=res-1,已经减过了。
        
        return count;
    
;

以上是关于C++汉明距离的主要内容,如果未能解决你的问题,请参考以下文章

leetcode每日一题汉明距离

美团笔试-第二题最大汉明距离:

美团笔试-第二题最大汉明距离:

461. 汉明距离

461-汉明距离

leetcode-汉明距离