其实就是图论里边的偶图,例如:当只有所有数都是0或1的时候,0和1看成两个分支 0为X分支 1为Y分支 求边数,0和1连边才有汉明距
离,同一分支不能互连 按位运算把所有nums[i]某一位的0和1看成两个分支 0为X分支 1为Y分支 求边数,0和1连边才有汉明距离,同一分
支不能互连
两种方法:
class Solution {
public int totalHammingDistance(int[] nums) {
int res=0;
int []digit=new int[32];
for(int i=0;i<nums.length;i++){
int idx=0;
while(nums[i]!=0){
digit[idx]+=nums[i]&1;
idx++;
nums[i]>>=1;
}
}
for(int i=0;i<32;i++){
res+=digit[i]*(nums.length-digit[i]);
}
return res;
}
}
class Solution {
public int totalHammingDistance(int[] nums) {
int len=nums.length;
int res=0;
for(int i=0;i<=31;i++){
int digitone=0;
for(int j=0;j<len;j++){
digitone+=(nums[j]>>i)&1;
}
res+=digitone*(len-digitone);
}
return res;
}
}