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

    如题,要求数组的全部汉明距离。首先想到的解决思路是通过两重循环的方法分别解出不同的两个整数之间的汉明距离,然后求出总和,但是最后发现这种方法会导致超时。最后看了网上的答案,主要思路是分别求出所有整数的每个位的总汉明距离,然后相加。

    那么问题就在于如何求出每个位的总汉明距离,方法分两步:

    1、求出该位中有多少个1,假设为bitcount ;

    2、假设数组长度为 n , 那么该位中为 0 的位个数为 n - bitcount , 因为等于1的位与等于 0 的位的汉明距离为 1, bitcount 个等于1的位与 1个等于0 的位的总汉明距离为 bitcount * 1 , 所以计算位的总汉明距离为 bitcount * (n - bitcount) 。

    最后代码如下:

     1 class Solution {
     2     public int totalHammingDistance(int[] nums) {
     3         int sum = 0;
     4         
     5         for(int i = 0 ; i < 32 ; i++){
     6             int bitcount = 0;
     7             for(int j = 0 ; j < nums.length ; j++){
     8                 bitcount += ( nums[j] >> i) & 1;
     9             }
    10             sum += bitcount*( nums.length - bitcount);
    11         }
    12         
    13         return sum;
    14     }
    15 }

    END

  • 相关阅读:
    268. Missing Number
    217. Contains Duplicate
    189. Rotate Array
    Two Sum II
    122. Best Time to Buy and Sell Stock II
    169. Majority Element
    C# ConfigurationManager不存在问题解决
    C# sqlhelper
    C#基础
    数据库事务日志已满的解决办法
  • 原文地址:https://www.cnblogs.com/sssysukww/p/8983941.html
Copyright © 2011-2022 走看看