汉明距离

题目解析:判断两个数的对应的二进制位不同的个数 直接判断 (x>>i)&1 和(y>>i)&1,先获取对应二进制位,在判断是否相等即可
class Solution {
public int hammingDistance(int x, int y) {
int count = 0;
// 从后向前依次取出二进制位,进行比较
for (int i = 0; i < 31; i++) {
if (((x >> i) & 1) != ((y >> i) & 1)) {
count++;
}
}
return count;
}
}
比特位计数

题目解析:给了一个数 n,从 [0,n] 中,找出每一个数对应的二进制位中 1 的个数,并将其放一个长度为 (n+1) 数组中 暴力解法:因为 n & (n-1) 每次都可以干掉最右边的 1,这样每次遇到一个数,都进行这样的操作,直到这个数变成 0,才进行下一个数的计算,时间复杂度:O(n * log n) 规律:一个正整数 x ,右移一位,将会去掉最低位,变成 x / 2 但是我们可以知道,如果 x 是偶数其 1 的个数和 x / 2 是一样的,因为后面都是 0 奇数的话就要 +1 偶数:bits[x] = bits[x>>1] 奇数:bits[x] = bits[x>>1] + 1 通过这种方法可以利用前面已经计算过的数据,不用像上面重复计算 时间复杂度:O(n)
// 遇到一个数,求出这个数有多少 1
class {
[] countBits( n) {
[] bits = [n + ];
( ; i <= n; i++) {
;
i;
(x > ) {
x = x & (x - );
count++;
}
bits[i] = count;
}
bits;
}
}













