汉明距离

题目解析:判断两个数的对应的二进制位不同的个数。 直接判断
(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)。









