leetcode-461:汉明距离

简介: leetcode-461:汉明距离

题目

题目连接

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

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:

输入:x = 1, y = 4
输出:2
解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
上面的箭头指出了对应二进制位不同的位置。

示例 2:

输入:x = 3, y = 1
输出:1

解题

参考链接

方法一:移位实现位计数

x与y异或,那么统计该结果中位1的个数即可。

class Solution {
public:
    int hammingDistance(int x, int y) {
        int m=x^y;
        int res=0;
        while(m){
            res+=(m&1);
            m>>=1;
        }
        return res;
    }
};

方法二:内置位1计数

class Solution {
public:
    int hammingDistance(int x, int y) {
        return __builtin_popcount(x^y);
    }
};

方法三:Brian Kernighan 算法

class Solution {
public:
    int hammingDistance(int x, int y) {
        int m=x^y;
        int res=0;
        while(m){
            res++;
            m&=m-1;
        }
        return res;
    }
};
相关文章
|
4月前
leetcode-72:编辑距离
leetcode-72:编辑距离
23 0
|
4月前
|
C++
汉明距离(C++)
汉明距离(C++)
12 0
|
4月前
leetcode-542:01 矩阵
leetcode-542:01 矩阵
17 0
|
11月前
|
存储 测试技术 C++
力扣6-N 字形变换&力扣9- 回文数
力扣6-N 字形变换&力扣9- 回文数
50 0
|
11月前
|
算法
Manachar算法(马拉车算法):快速求取最长回文子串
求取最长回文子串的长度的最佳方法为 Manachar算法 ,俗称马拉车算法。常见的方法就是中心扩散法,但时间复杂度较高。
70 0
Manachar算法(马拉车算法):快速求取最长回文子串
|
12月前
|
算法 C++
【每日算法Day 64】LeetCode 861. 翻转矩阵后的得分
【每日算法Day 64】LeetCode 861. 翻转矩阵后的得分
|
12月前
|
人工智能
Leetcode53/152—最大子数组和/最大子数组乘积(状态转移方程/不熟)
Leetcode53/152—最大子数组和/最大子数组乘积(状态转移方程/不熟)
|
12月前
【AcWing】曼哈顿距离
【AcWing】曼哈顿距离
41 0
|
算法
LeetCode:376. 摆动序列——说什么贪心和动规~
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。 子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。
LeetCode 461. 汉明距离
LeetCode 461. 汉明距离
67 0
LeetCode 461. 汉明距离