题意:给定一个array找出所有的位0与1不同的总和
思路:遍历数组,统计每一位的0与1的数量,并把每一位0与1的数量的乘积加入结果,计算完32位之后,结果即为所求
思想:位运算
复杂度:时间O(n*32),空间O(1)
class Solution {
public int totalHammingDistance(int[] nums) {
int sum = 0;
int n = nums.length;
for(int j=0;j<32;j++) {
int cnt = 0;
for(int i=0;i<nums.length;i++) {
cnt += (nums[i] >> j) & 1;
}
sum += (n-cnt) * cnt;
}
return sum;
}
}
网友评论