LeetCode 461.汉明距离

作者: 心谭 | 来源:发表于2020-03-11 20:21 被阅读0次

📖博客原文 :《LeetCode 461.汉明距离 - JavaScript》

汉明距离定义:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

题目描述:给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ x,y < 2^31.

解法 1:使用掩码

这里使用掩码对 x 和 y 进行 & 运算。若 x 和 y 在此位上的二进制不同,那么相与的结果不同。

代码实现如下:

// ac地址:https://leetcode-cn.com/problems/hamming-distance/
// 原文地址:https://xxoo521.com/2020-03-04-hamming-distance/
var hammingDistance = function(x, y) {
    let dis = 0;
    let mask = 0x01;
    let times = 0;
    while (times < 31) {
        if ((x & mask) !== (y & mask)) {
            ++dis;
        }
        mask = mask << 1;
        ++times;
    }

    return dis;
};

解法 2: 布赖恩·克尼根算法(推荐)

我也是看了官方的题解才知道这算法竟然有名字(震惊),它用于快速判断二进制中有多少个 1。它是借助 num & (num - 1) 来直接去除 num 的二进制中最右边的 1。

相较于普通移位判断,布赖恩·克尼根算法是高效的:它直接跳过了二进制中的 0,有多少个 1 就判断多少次。

在使用布赖恩·克尼根算法之前,需要借助 ^ 运算,让不同的位变 1,相同的位变 0。最后再统计二进制中有多少 1 即可。

代码实现如下:

// ac地址:https://leetcode-cn.com/problems/hamming-distance/
// 原文地址:https://xxoo521.com/2020-03-04-hamming-distance/
/**
 * @param {number} x
 * @param {number} y
 * @return {number}
 */
var hammingDistance = function(x, y) {
    let v = x ^ y; // 异或:相同位为0,不同位为1
    let dis = 0;
    while (v) {
        v = v & (v - 1);
        ++dis;
    }
    return dis;
};

注意:这种思路在《剑指 offer - 二进制中 1 的个数》中也有应用。

更多资料

若有错误,欢迎指正。若对您有帮助,请给个「关注+点赞」,您的支持是我更新的动力 👇

相关文章

  • LeetCode 461.汉明距离

    ?博客原文 :《LeetCode 461.汉明距离 - JavaScript》 汉明距离定义:两个整数之间的汉明距...

  • TOP 91 - 95

    461. 汉明距离[https://leetcode-cn.com/problems/hamming-distan...

  • 力扣每日一题:461.汉明距离 细说异或与二进制 双解!

    461.汉明距离[https://leetcode-cn.com/problems/hamming-distanc...

  • 【LeetCode】461. 汉明距离

    LeetCode算法题目 题目 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数...

  • [LeetCode]461. 汉明距离

    461. 汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计...

  • 【LeetCode】461. 汉明距离

    题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们...

  • Leetcode 461. 汉明距离

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

  • LeetCode 461. 汉明距离 Hamming Dista

    【题目描述】两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们...

  • 461. 汉明距离

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

  • 461. 汉明距离

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

网友评论

    本文标题:LeetCode 461.汉明距离

    本文链接:https://www.haomeiwen.com/subject/dtnhjhtx.html