汉明距离(位运算,清晰图解)

汉明距离(位运算,清晰图解)题目 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目 给出两个整数 x 和 y 计算它们之间的汉明距离 注意 0 x y lt 2 31 示例 解题思路 要找出两个整数对应二进制位不同的位置的数目 对 位运算 有所了解的童鞋

大家好,我是讯享网,很高兴认识大家。

题目

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

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

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

示例:


讯享网

解题思路

要找出两个整数对应二进制位不同的位置的数目,对 位运算 有所了解的童鞋,应该会很自然地想到位运算中的 按位异或,通过将两个整数对应二进制位 按位异或(同一位置,元素相同异或得 0 或者得 1) 找到其二进制不同的位置,找到之后,只需要统计异或的结果中 1 的个数即可。

举栗

示例 为栗,如下图示:

元素值及其对应的二进制

元素值及其对应的二进制

异或之后的结果

统计整数的二进制表达中 1 的个数

以上面 x ^ y 的结果为栗,统计 x ^ y 中 1 的个数

cnt 记录 x ^ y 中 1 的个数

方法一 :通过不断右移获取末尾位统计二进制中 1 的个数

第一次

x ^ y 右移一位

右移末尾为 0 继续右移

第二次

 

x ^ y 继续右移一位

此时 x ^ y == 0,无需再右移。

方法二 :通过 n & (n - 1) 统计二进制中 1 的个数

还是以上面的 x ^ y 的结果为栗,统计 x ^ y 中 1 的个数,假设 n = x ^ y

第一次

第二次

此时 n & (n - 1) == 0,统计完成。

Show me the Code

c 语言

int hammingDistance(int x, int y){   int cnt = 0;   int z = x ^ y;   while (z != 0) {     cnt += z & 1;     z = z>>1;   }      return cnt; } 

讯享网

c++

讯享网int hammingDistance(int x, int y) {     int cnt = 0;     int z = x ^ y;     while (z != 0) {         cnt++;         z &= (z - 1);     }     return cnt; } 

python3

class Solution:     def hammingDistance(self, x: int, y: int) -> int:         cnt, z = 0, x ^ y         while z != 0:             cnt += 1             z = z & (z - 1)                      return cnt 

golang

讯享网func hammingDistance(x int, y int) int {     cnt, z := 0, x ^ y     for z != 0 {         cnt++         z &= z - 1     }          return cnt } 

往期精彩回顾

决定你是否能进字节的几道题

更多精彩

关注公众号【程序员小熊】,后台回复【算法】或【python】,即可获取高清**的经典算法或 python 电子书~

为了回馈读者,本公众号不定期会有送礼活动,敬请关注~

小讯
上一篇 2025-01-19 15:53
下一篇 2025-03-23 21:45

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70836.html