zoukankan      html  css  js  c++  java
  • 汉明距离

    题目

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

    给出两个整数 x 和 y,计算它们之间的汉明距离。

    示例:

    输入: x = 1, y = 4
    
    输出: 2
    
    解释:
    1   (0 0 0 1)
    4   (0 1 0 0)
           ↑   ↑
    
    上面的箭头指出了对应二进制位不同的位置。

    解题思路

    布赖恩·克尼根算法

    寻找一种更快的方法找出等于 1 的位数。

    是否可以像人类直观的计数比特为 1 的位数,跳过两个 1 之间的 0。例如:10001000。

    上面例子中,遇到最右边的 1 后,如果可以跳过中间的 0,直接跳到下一个 1,效率会高很多。

    这是布赖恩·克尼根位计数算法的基本思想。该算法使用特定比特位和算术运算移除等于 1 的最右比特位。

    当我们在 number 和 number-1 上做 AND 位运算时,原数字 number 的最右边等于 1 的比特会被移除。

    基于以上思路,通过 2 次迭代就可以知道 10001000 中 1 的位数,而不需要 8 次

    代码

    func hammingDistance(x int, y int) int {
        res := 0
    	n := x ^ y
    	for n != 0 {
    		res++
    		n = n & (n-1)
    	}
    	return res
    }
    

      

  • 相关阅读:
    Java EE javax.servlet中的ServletContext接口
    Java EE javax.servlet中的ServletConfig接口
    MD5加密工具
    redis常见数据操作
    Java文件上传与下载
    JSP技术
    spring集成swagger
    freemarker模板引擎的使用
    log4j生成日志
    Java自定义注解
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14265559.html
Copyright © 2011-2022 走看看