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

  • 相关阅读:
    HDU 2047 阿牛的EOF牛肉串
    HDU 2015 偶数求和
    HDU 2029 算菜价
    HDU 2028 Lowest Common Multiple Plus
    动态函数库设计
    静态函数库设计
    Linux编程规范
    Linux应用程序地址布局
    Core Dump 程序故障分析
    W-D-S-UART编程
  • 原文地址:https://www.cnblogs.com/sssysukww/p/8983941.html
Copyright © 2011-2022 走看看