前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >461 汉明距离

461 汉明距离

作者头像
木瓜煲鸡脚
发布2021-10-08 15:31:12
5750
发布2021-10-08 15:31:12
举报
文章被收录于专栏:Jasper小笔记

题目信息

题目地址:https://leetcode-cn.com/problems/hamming-distance/

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

示例 1:

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

示例 2:

代码语言:javascript
复制
输入:x = 3, y = 1
输出:1

提示:

0 <= x, y <= 2^31 - 1

题解

这题看提示上面写了是正数,所以不用管负数补码。直接看数字的二进制比较即可。

很容易就能想到,肯定是哪种位运算能够get到二进制数字不同。那不就是异或同或么,一个是不同为1相同为0,一个相反。

代码语言:javascript
复制
0101 ^ 0010 = 0111

我们使用异或运算,有几个不同,得到的结果就有几个1.

那岂不变成了上一题《位一的个数》求1的个数,直接搞过来

代码语言:javascript
复制
// 求位1的个数
public int hammingWeight(int n) {
    int num = 0;
    while(n != 0){
        n = n & (n-1);
        num++;
    }
    return num;
}
代码语言:javascript
复制
public int hammingDistance(int x, int y) {
    return hammingWeight(x ^ y)
}

这个时间复杂度也就是求为一的个数的复杂度,其实是n的长度也就是最大不过31是一个常数所以是O(1),空间复杂度也是O(1)

总结

还没思考就已经写完一大早就水了一篇文章,看了官方解题咋一看还有多解,实际上全都是“位一的个数”这题的不同解再配上异或运算。关于位一的个数解的细节可以看我这篇 191 位1的个数

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目信息
  • 题解
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档