题目链接:https://leetcode-cn.com/problems/total-hamming-distance/
思路:
第一种方法:直接暴力,不解释了,思路和https://leetcode-cn.com/problems/hamming-distance/这个题是一样的,这个题的题解:https://blog.youkuaiyun.com/lgz0921/article/details/117327193
第二种方法:n个数拆解每一位,统计当前位有几个1假设有x个,则当前位对结果的贡献就是x*(n-x)。(2^30 = 1073741824 > 10^9)
上代码:
第一种方法(用java写的):
class Solution {
public int totalHammingDistance(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
result += Integer.bitCount(nums[i] ^ nums[j]);
}
}
return result;
}
}
第二种方法(用kotlin写的):
class Solution {
fun totalHammingDistance(nums: IntArray): Int {
var result = 0
for (i in 0 until 30) {
var x = 0
for (num in nums) {
x += num shr i and 1
}
result += x * (nums.size - x)
}
return result
}
}
本文介绍了如何解决LeetCode上的‘总汉明距离’问题,提供了两种方法。第一种是直接暴力求解,类似于求解汉明距离。第二种方法更高效,通过统计每个位上1的数量,计算其对总汉明距离的贡献。具体实现分别用Java和Kotlin编写了代码示例。这种方法避免了重复计算,提高了算法效率。
2178





