Leetcode 477.汉明距离总和
Posted kexinxin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 477.汉明距离总和相关的知识,希望对你有一定的参考价值。
汉明距离总和
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
示例:
输入: 4, 14, 2
输出: 6
解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
注意:
- 数组中元素的范围为从 0到 10^9。
- 数组的长度不超过 10^4。
思路
题目分析:
这一题目如果借用汉明距离–位运算 分别求两位数字之间的汉明距离,最后再求和,那么肯定会超时。换一种思路:对每一个数的相同位置的上的二进制位进行判断,统计是1的个数cnt,那么为0的个数就是nums.size()-cnt,那么该二进制位就会形成cnt*(nums.size()-cnt)的汉明距离。
1 class Solution { 2 public int totalHammingDistance(int[] nums) { 3 int cnt = 0, ans = 0; 4 for (int i = 0; i < 32; i++) { 5 cnt = 0; 6 for (int j = 0; j < nums.length; j++) { 7 if ((nums[j] & 1) > 0) { 8 cnt++; 9 } 10 nums[j] >>= 1; 11 } 12 ans += cnt * (nums.length - cnt); 13 } 14 return ans; 15 } 16 }
以上是关于Leetcode 477.汉明距离总和的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 477 / 剑指 Offer 63 / 64 /65 / 66