一、题目
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
二、思路
数字的每一位上的汉明距离和其他位不相关,只需统计出不同元素同一位的1的个数n,就可以制度这位的总共汉明距离:n*(nums.length - n)。
三、代码
class Solution {public int totalHammingDistance(int[] nums) {int[] memo = new int[32];for (int num : nums) {for (int i = 0; i < memo.length; i++) {memo[i] += ((num >> i) & 1);}}int ans = 0;for (int i = 0; i < memo.length; i++) {ans += memo[i]*(nums.length - memo[i]);}return ans;}}
空间复杂度位O(n),时间复杂度为O(32*n)。空间复杂度可以进行优化,此处不作优化。
