博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Total Hamming Distance 全部汉明距离
阅读量:5909 次
发布时间:2019-06-19

本文共 1272 字,大约阅读时间需要 4 分钟。

The  between two integers is the number of positions at which the corresponding bits are different.

Now your job is to find the total Hamming distance between all pairs of the given numbers.

Example:

Input: 4, 14, 2Output: 6Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (justshowing the four bits relevant in this case). So the answer will be:HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

Note:

  1. Elements of the given array are in the range of to 10^9
  2. Length of the array will not exceed 10^4.

这道题是之前那道的拓展,由于有之前那道题的经验,我们知道需要用异或来求每个位上的情况,那么我们需要来找出某种规律来,比如我们看下面这个例子,4,14,2和1:

4:     0 1 0 0

14:   1 1 1 0

2:     0 0 1 0

1:     0 0 0 1

我们先看最后一列,有三个0和一个1,那么它们之间相互的汉明距离就是3,即1和其他三个0分别的距离累加,然后在看第三列,累加汉明距离为4,因为每个1都会跟两个0产生两个汉明距离,同理第二列也是4,第一列是3。我们仔细观察累计汉明距离和0跟1的个数,我们可以发现其实就是0的个数乘以1的个数,发现了这个重要的规律,那么整道题就迎刃而解了,只要统计出每一位的1的个数即可,参见代码如下:

class Solution {public:    int totalHammingDistance(vector
& nums) { int res = 0, n = nums.size(); for (int i = 0; i < 32; ++i) { int cnt = 0; for (int num : nums) { if (num & (1 << i)) ++cnt; } res += cnt * (n - cnt); } return res; }};

 本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
[原创]典型Web服务器入门
查看>>
VMware/vSphere克隆主机网卡启动失败
查看>>
linux 笔记--RAID,mdadm,LVM
查看>>
我的友情链接
查看>>
linux修改IP和DNS
查看>>
windows下安装redis
查看>>
Python基础5 常用模块
查看>>
我的友情链接
查看>>
一台主机部署多个mysqld实例配置
查看>>
通过案例学调优之--跨库建立物化视图(Materialized View)
查看>>
WordPress新增Page的模版文件
查看>>
JAVAWEB应用的policy安全配置值得深思
查看>>
移动客户端与服务端Session那点秘密
查看>>
vim快速命令
查看>>
在ideal创建新的模块(子项目,同时依赖父模块)
查看>>
对象的序列化和反序列化
查看>>
sql 子查询和连接查询
查看>>
android学习之wifimanager
查看>>
Zabbix3.4部署
查看>>
自动Yum安装DNS服务器
查看>>