汉明距离求解
Leetcode 461
给x和y,求解x和y的汉明距离
int hammingDistance(int x,int y){
int dist=0,n=x^y;
while(n){
dist++;
n&=n-1;
}
return dist;
}
汉明距离总和
Leetcode 471
计算一个数组中,任意两个数之间汉明距离的总和。
一开始想到的是利用461题的函数,每两个数字计算一次,但这样显然是O(n^2),耗时太多。
看到题解中把横向比较换成纵向的思路。
对于每个数二进制的第i位,一共有t个0,n-t个1的话,那该位上的汉明距离总和是t*(n-t)——两组数据的全排列