leetcode的Hot100系列--461. 汉明距离
2024-08-30 01:17:54
求两个数的二进制位不同的位置,最先想到的就是异或操作,
异或:按位运算,相同为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;
}
最新文章
- shiro realm 注解失败问题解决过程
- 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
- BZOJ 1064 假面舞会(NOI2008) DFS判环
- Codeforces Round #380 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 2) E. Subordinates 贪心
- python 优雅的使用正则表达式 ~ 1
- docker-py的配置与使用
- sphinx插入代码
- [JAVA关键字] static &; final
- webservice基本功能介绍
- 一次使用innobackupex重新搭建主从复制报错解决方法及注意事项
- 软件开发者路线图梗概&;书摘chapter7
- UVA12558 埃及分数
- CAD二次开发中浮动面板不浮动的问题
- Linux内存管理--虚拟地址、逻辑地址、线性地址和物理地址的区别(二)【转】
- requests https访问错误SSLError: certificate verify failed 及InsecureRequestWarning处理办法
- 关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要
- drupal 通过hook_menu实现添加菜单
- 树链剖分学习&;BZOJ1036
- 用原生JS写一个网页版的2048小游戏(兼容移动端)
- C#转Java之路之三:多线程并发容器即线程安全的容器
热门文章
- 记一次虚拟化环境下Windows IO性能的解析
- MySql 5.7 重置root密码
- 1-5-vim编辑器的使用
- Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good
- WPF 数据模板使用值转换器
- WPF获取和设置应用程序范围的资源
- LINQ查询表达式---------into
- 漫步Facebook开源C++库Folly之string类设计(散列、字符串、向量、内存分配、位处理等,小部分是对现有标准库和Boost库功能上的补充,大部分都是基于性能的需求而“重新制造轮子”)
- RESTful API设计原则与规范
- _stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l 比较函数