算法题每日一练—第48天:汉明距离

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、问题描述

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

给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

题目链接:汉明距离

二、题目要求

样例 1

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

样例 2

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

考察

1.位运算简单题型
2.建议用时5~20min
复制代码

三、问题分析

本题是位运算的第3题,没了解过位运算相关知识点可以看这一篇文章,讲解比较详细:

算法题每日一练—第45天:位运算

什么是汉明距离,简单来讲就是将两个10进制数字转换成2进制数字之后,统计不同位置上面1的个数,那如何将这题逐渐向位运算靠拢呢?

不同位置,啥叫不同位置,不就是如果相同位置都是1,那么就不计数。只有当相同位置一个为1,另一个为0时才开始计数,这不就是位运算的与计算吗?

7.png

四、编码实现

class Solution {
public:
    int hammingDistance(int x, int y) {
        int i,ans=0;//初始化数据
        for(i=0;i<32;i++)//32位循环判断
        {
            if((x^y)&1<<i)//与计算并且开始查询1的个数
            {
                ans++;//计数器++
            }
        }
        return ans;//输出结果
    }
};
复制代码

五、测试结果

1.png

2.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享