zoukankan      html  css  js  c++  java
  • 【leetcode】461. Hamming Distance

    最近的学习有些提不起兴趣,我打算加点辅料,开始在leetcode上面刷刷算法题
    打算从最简单的最常见的题开始刷,每天1-2题,可以利用一下上下班路途上的时间,岂不是很高效~~
    ————————————————————————————————————

    原题:

    The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
    Given two integers x and y, calculate the Hamming distance.

    解析:

    汉明距离是两个数的二进制数之间不同的位数的个数,如1的二进制是(0001),4的二进制是(0100)
    那1和4之间的汉明距离就是2(第2位和第4位不同)

    我的解法:

    public class HammingDistance {
        public static int getHammingDistance(int x, int y) {
            int hammingDistance = 0;
            //取x,y的异或,得到一个2进制,其中1的个数就是汉明距离
            int z = x ^ y;
            //用z与z-1做与运算,结果也做相同操作,运算几次就有几个1
            while (z != 0) {
                hammingDistance++;
                z = z & (z - 1);
            }
            return hammingDistance;
        }
    }
    

    Discuss最优解:

    public class Solution {
        public int hammingDistance(int x, int y) {
            return Integer.bitCount(x ^ y);
        }
    }
    

    思路一样,只是不知道这个方法。。
    计算二进制位数的解法,看了源码是这样的。。

    public static int bitCount(int i) {
            // HD, Figure 5-2
            i = i - ((i >>> 1) & 0x55555555);
            i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
            i = (i + (i >>> 4)) & 0x0f0f0f0f;
            i = i + (i >>> 8);
            i = i + (i >>> 16);
            return i & 0x3f;
        }
    

    不懂原理,但是比我遍历应该要快一些

  • 相关阅读:
    awk 连接字符串
    VCF (Variant Call Format)格式详解
    Extracting info from VCF files
    JAVA中AES对称加密和解密
    关于Java中常用加密/解密方法的实现
    Java的MD5加密和解密
    java实现MD5加密
    Java中String和byte[]间的转换浅析
    Java中字符串和byte数组之间的相互转换
    字符串与byte[]之间的转换
  • 原文地址:https://www.cnblogs.com/shanelau/p/7105141.html
Copyright © 2011-2022 走看看