477. Total Hamming Distance

来源:互联网 发布:php html5 关系 编辑:程序博客网 时间:2024/06/02 04:20

The Hamming distance 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.
开始写的O(n^2)解法,用Integer.bitCount()函数,会超时。后改用O(31n)方法。思路为最外层循环是0-31,内层遍历nums统计当前位是一的数的数量,count += bitCount * (n - bitCount)。意思是这一位有bitCount * (n - bitCount)种情况汉明距离为1。代码如下:

public class Solution {    public int totalHammingDistance(int[] nums) {        int count = 0, n = nums.length;        for (int i = 0; i < 31; i ++) {            int bitCount = 0;            for (int num: nums) {                bitCount += (num >>> i) & 1;            }            count += bitCount * (n - bitCount);        }        return count;    }}