求数组两两数字,有不一样的位数
如果利用暴力解法,会超时
Java的int是32位的,看看数组里的数对应位数的0与1的个数
相当于乘法公式
image.png
class Solution {
public int totalHammingDistance(int[] nums) {
int res=0;
for(int i=0;i<32;i++){
int zero=0;
int one=0;
for(int j=0;j<nums.length;j++){
if((nums[j]&1)==1){
one++;
nums[j]=nums[j]>>>1;
}else{
zero++;
nums[j]=nums[j]>>>1;
}
}
res=res+zero*one;
}
return res;
}
}
网友评论