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
    }
    

      

  • 相关阅读:
    DOM性能小记
    利用tween.js算法生成缓动效果
    小游戏(锅打灰太狼)
    DOM应用实例(寻找房祖名)
    学习总结——DOM
    图片预加载
    删除src值为空的img标签
    2019-08-17 纪中NOIP模拟B组
    [SCOI2015] 小凸玩矩阵
    [JZOJ4899] 雪之国度
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14265559.html
Copyright © 2011-2022 走看看