两个整数之间的汉明距离是指,相应二进制位不同的位置的数目。
给你两个整数x和y,计算他们之间的汉明距离。
其中,0 ≤ x
, y
输入:
x = 1, y = 4
输出:
2
样例解释
x = 1 ==> 0 0 0 1
y = 4 ==> 0 1 0 0
↑ ↑
两个数位的二进制不同,所以答案为2.a.题目没有要求空间复杂度,我们可以开两个大小为31的数组,将每个数都转换成二进制的形式,然后进行逐位比较并计算答案。
b.如果仔细思考可以发现,逐位比较两个数其实不需要开数组存放他们的二进制的形式,在一个循环内对两个数同时逐位比较即可,时间复杂度为O( log( max( x, y) ) )。下面给出这种解法的参考程序。
c.如果读者了解位运算的知识,而且面试官要求优化代码运行速度,那么参考代码中的模运算和除法运算均可以用位运算替代。
d.如果读者知道按位异或的性质(相同为0,不同为1),那么就可以想到如果将x和y进行异或操作,那么我们最后只需利用位运算统计异或结果中 “1” 的个数即可。
这是一道简单难度的题,主要考察进制转换和语法的能力。这道题如果可以不开数组计算出结果或者利用异或的性质计算出结果,那么可以有hire的水平。如果运用位运算优化了代码,那么还可以有strong hire的评价。
http://www.jiuzhang.com/solution/hamming-distance/
http://www.lintcode.com/zh-cn/problem/count-1-in-binary/
http://www.lintcode.com/zh-cn/problem/swap-bits/
九章求职小助手 app小程序上线
面试题 系统设计 薪资谈判
面试指导 内推信息 冷冻期
面试经验 技术干货