博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode的Hot100系列--461. 汉明距离
阅读量:5107 次
发布时间:2019-06-13

本文共 669 字,大约阅读时间需要 2 分钟。

求两个数的二进制位不同的位置,最先想到的就是异或操作

异或:按位运算,相同为0,不同为1。

比如:

a = 6 对应的二进制表示为: 0 0 1 1 1
​ b = 9 对应的二进制表示为: 0 1 0 0 1
则 a ^ b = 14 对应的二进制表示为: 0 1 1 1 0
所以,只要算出异或之后的数的二进制表示方法里面1的个数。
比如,对于上面的异或之后为14,14的二进制里面1的个数为3,那么汉明距离就是3。
想知道是否有1,最快的当然还是位与操作

与:按位运算,相当于乘法,0与0是0,1与0是0,0与1是0,1与1是1。

所以,任何值与1相与,得到的就是就是原值二进制的最后一位

要么是1,要么是0,
这样就能得到原值的最低位是否是1。
然后再把原值整体右移一位,再查看最低位是否是1,
循环往复,就能够算出原值二进制里面1的个数了。
附上代码:

int hammingDistance(int x, int y){    int iDistance = 0;    unsigned int uiXor;    uiXor = x ^ y;    while (uiXor > 0)    {        if (uiXor & 1)        {            iDistance ++;        }        uiXor >>= 1;    }    return iDistance;}

转载于:https://www.cnblogs.com/payapa/p/11100329.html

你可能感兴趣的文章
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
php_扑克类
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Nginx+Keepalived 实现双击热备及负载均衡
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>