0
点赞
收藏
分享

微信扫一扫

统计两数「二进制表示中不同位」个数的几种方式 | Java


逐位比较

本身不改变 和 ,每次取不同的偏移位进行比较,不同则加一。

循环固定取满 。

统计两数「二进制表示中不同位」个数的几种方式 | Java_空间复杂度

代码:

class Solution {
public int hammingDistance(int x, int y) {
int ans = 0;
for (int i = 0; i < 32; i++) {
int a = (x >> i) & 1 , b = (y >> i) & 1;
ans += a != b ? 1 : 0;
}
return ans;
}
}
  • 时间复杂度:,固定为
  • 空间复杂度:

右移统计

每次都统计当前 和 的最后一位,统计完则将 和 右移一位。

当 和 的最高一位 都被统计过之后,循环结束。

统计两数「二进制表示中不同位」个数的几种方式 | Java_后端_02

代码:

class Solution {
public int hammingDistance(int x, int y) {
int ans = 0;
while ((x | y) != 0) {
int a = x & 1, b = y & 1;
ans += a ^ b;
x >>= 1; y >>= 1;
}
return ans;
}
}
  • 时间复杂度:,最多为
  • 空间复杂度:

lowbit

熟悉树状数组的同学都知道,​​lowbit​​​ 可以快速求得 二进制表示中最低位 表示的值。

因此我们可以先将 和 进行异或,再统计异或结果中 的个数。

统计两数「二进制表示中不同位」个数的几种方式 | Java_后端_03

代码:

class Solution {
int lowbit(int x) {
return x & -x;
}
public int hammingDistance(int x, int y) {
int ans = 0;
for (int i = x ^ y; i > 0; i -= lowbit(i)) ans++;
return ans;
}
}
  • 时间复杂度:,最多为
  • 空间复杂度:
举报

相关推荐

0 条评论