码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 477.汉明距离总和

时间:2019-02-14 00:27:07      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:add   不同   数组   就是   超过   turn   表示   进制   注意   

汉明距离总和

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。

计算一个数组中,任意两个数之间汉明距离的总和。

示例:

输入: 4, 14, 2

 

输出: 6

 

解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)

所以答案为:

HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

注意:

  1. 数组中元素的范围为从 0到 10^9。
  2. 数组的长度不超过 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.汉明距离总和

标签:add   不同   数组   就是   超过   turn   表示   进制   注意   

原文地址:https://www.cnblogs.com/kexinxin/p/10372456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!