LeetCode初级算法之其他:461.汉明距离
题目信息
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
示例 1:
1 | 输入:x = 1, y = 4 |
示例 2:
1 | 输入:x = 3, y = 1 |
提示:
0 <= x, y <= 2^31 - 1
题解一
这题看提示上面写了是正数,所以不用管负数补码。直接看数字的二进制比较即可。
很容易就能想到,肯定是哪种位运算能够get到二进制数字不同。那不就是异或和同或么,一个是不同为1相同为0,一个相反。
1 | 0101 ^ 0010 = 0111 |
我们使用异或运算,有几个不同,得到的结果就有几个1.
那岂不是上一题。直接搞过来:
1 | // 求位1的个数 |
1 | public int hammingDistance(int x, int y) { |
这个时间复杂度也就是求为一的个数的复杂度,其实是n的长度也就是最大不过31是一个常数所以是O(1),空间复杂度也是O(1)
总结
还没思考就已经写完了感觉水了一篇文章,看了官方解题咋一看还有多解,实际上全都是“位一的个数”这题的不同解再配上异或运算。所以关于位一的个数解的细节可以看我这篇。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 木瓜煲鸡脚's blog!
评论