有点慢,两层循环也可以完成,就是换个方向,外层遍历32大小的bits数组,里层遍历nums的数字每次右移一位,计算方法类似。
class Solution {
public int totalHammingDistance(int[] nums) {
//int 是4byte , 每个byte对应8位(比特),所以一个int是32位
int [] bits = new int[32];
int res=0, len = nums.length;
for (int j : nums) {
int index = bits.length - 1;
while(j != 0){
if(j == 1){
bits[index]++;
break;
}
if(j % 2 == 1){
bits[index]++;
}
j = j / 2;
index--;
}
}
for (int bit : bits) {
res += (bit * (nums.length - bit));
}
return res;
}
}