zoukankan      html  css  js  c++  java
  • Leetcode 477.汉明距离总和

    汉明距离总和

    两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。

    计算一个数组中,任意两个数之间汉明距离的总和。

    示例:

    输入: 4, 14, 2

    输出: 6

    解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)

    所以答案为:

    HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

    注意:

    1. 数组中元素的范围为从 0到 10^9。
    2. 数组的长度不超过 10^4。

    思路

    题目分析:

    这一题目如果借用汉明距离–位运算 分别求两位数字之间的汉明距离,最后再求和,那么肯定会超时。换一种思路:对每一个数的相同位置的上的二进制位进行判断,统计是1的个数cnt,那么为0的个数就是nums.size()-cnt,那么该二进制位就会形成cnt*(nums.size()-cnt)的汉明距离。

     1 class Solution {
     2     public int totalHammingDistance(int[] nums) {
     3         int cnt = 0, ans = 0;
     4         for (int i = 0; i < 32; i++) {
     5             cnt = 0;
     6             for (int j = 0; j < nums.length; j++) {
     7                 if ((nums[j] & 1) > 0) {
     8                     cnt++;
     9                 }
    10                 nums[j] >>= 1;
    11             }
    12             ans += cnt * (nums.length - cnt);
    13         }
    14         return ans;
    15     }
    16 }
  • 相关阅读:
    2020年“安洵杯”四川省大学生信息安全技术大赛 Misc WP
    整数划分问题
    二叉树根节点到叶子节点的所有路径和
    java正则表达式
    搜狗笔试
    跟谁学0923笔试
    360 笔试0926
    度小满0920
    TreeMap 常用函数
    达达0920
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10372456.html
Copyright © 2011-2022 走看看