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++汉明距离的主要内容,如果未能解决你的问题,请参考以下文章