• 汉明距离


    题目

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

    给出两个整数 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
    }
    

      

  • 相关阅读:
    classpath详解
    xml详解
    pojo、po、dto、dao、bo区别
    事务的四种隔离级别
    spring相关知识点易错
    Orm
    100+个Java项目视频教程+源码+笔记,项目经验不用愁了!
    使用TM1629A芯片驱动米字数码管
    关于安装airflow遇到的问题
    Semver(语义化版本号)扫盲
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14265559.html
Copyright © 2020-2023  润新知