博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
461. Hamming Distance(异或)
阅读量:4181 次
发布时间:2019-05-26

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

题目:将两个二进制数比较,输出不同位数的个数

思路:异或运算

class Solution {
public: int hammingDistance(int x, int y) { int sum = 0; for(int z=0;z<32;z++){ sum+=abs(((x<<31)^(y<<31))>>31); //右移时补1,所以需要取绝对值 x = x>>1; y = y>>1; } return sum; }};

另一种更快的方法:

class Solution {
public: int hammingDistance(int x, int y) { int sum = 0; x = x ^ y; while(x){ sum ++; x -= (x&(-x)); } return sum; }};

(x&(-x)可以求出1所在的最低位置。比如 x = 5 (0101)

x             x&(-x)      x -(x&(-x))5(0101)       1(0001)    4(0100)4(0100)       4(0100)    0(0000)结束

从上面可以看出,只需要求解2次即可。

转载地址:http://vnrai.baihongyu.com/

你可能感兴趣的文章
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>
C++程序员技术需求规划(发展方向)
查看>>
JNI
查看>>
IOS程序开发框架
查看>>
安装jdk的步骤
查看>>
简述JAVA运算符
查看>>
简易ATM源代码及运行结果
查看>>
简述Java中的简单循环
查看>>