zoukankan      html  css  js  c++  java
  • 477. Total Hamming Distance

    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, 2
    
    Output: 6
    
    Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
    showing 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.
    class Solution {
        public int totalHammingDistance(int[] nums) {
            int res = 0;
            int le = nums.length;
            for(int i = 0; i < 32; i++){
                int cur1 = 0;
                for(int j = 0; j < nums.length; j++){
                        cur1 += ((nums[j]>>i) & 1);              
                }
                res += (cur1) * (le - cur1);
            }
            return res;
        }
    }

    经过观察发现,每一位的汉明距离,等于该位1的个数*0的个数

    然后就32位,每一位都统计1的数量然后做一次计算,返回

    总结:we know integer has totally 32 bits, and after reviewing the example we found for each digits, the distance == 0's * 1's, for example, at 1st digit, there are 2 0's and 3 1's, so for each 0 and 1 we count it as one distance, so totally we have 2*3 = 6 distance.

    SO, for each digit, we calculate the number of 1's then 0's and multiply them and add together, we have the answer.

  • 相关阅读:
    实战篇之实现 OutLook 中以 EDM 形式发送通知邮件
    ASP.NET MVC5 之路由器
    ASP.NET MVC5 之数据迁移
    说不出的烦
    ASP.NET MVC5 之 Log4Net 的学习和使用
    读取配置文件参数和文件路径
    序列化和反序列化示例
    面向对象之封装
    面向对象4之常用的乱七八糟
    面向对象三之继承和派生
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13320613.html
Copyright © 2011-2022 走看看