public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
}
方法二:移位
为了计算等于 1
的位数,可以将每个位移动到最左侧或最右侧,然后检查该位是否为 1
。
class Solution {
public int hammingDistance(int x, int y) {
int z = x ^ y;
int distance = 0;
while(z != 0){
if(z % 2 == 1){
distance +=1;
}
z = z >> 1;
}
return distance;
}
}
方法三:布赖恩·克尼根算法
方法二是逐位移动,逐位比较边缘位置是否为 1。寻找一种更快的方法找出等于 1 的位数。
是否可以像人类直观的计数比特为 1 的位数,跳过两个 1 之间的 0。例如:10001000。
上面例子中,遇到最右边的 1 后,如果可以跳过中间的 0,直接跳到下一个 1,效率会高很多。
这是布赖恩·克尼根位计数算法的基本思想。该算法使用特定比特位和算术运算移除等于 1 的最右比特位。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-yhkHjFij-1710848735326)]