当前位置:网站首页>题解——汉明距离
题解——汉明距离
2022-07-30 05:46:00 【缘聚654】
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
示例 1:
输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
示例 2:
输入:x = 3, y = 1
输出:1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/hamming-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
想要解这一题对初学者来说最直观的方法就是将给的每个数进行转化,转化成二位数字,存储到数组中。由于转化二进时高位在前低位在后,所以在比较是需要从数组的末尾往前比较,但两个数组的长度肯定是不相同的,所以在短的那个比较完后,长数组余下的每一位是1便加1,是0则不进行操作,显然这是很麻烦的,我们也可以设置两个足够长的数组并赋初值为0,这样就能让两个数组从头到尾进行比较。当然这种方法还有更简洁的写法,如下
int hammingDistance(int x, int y){
int i=0;
for(;x!=0||y!=0;)
{
if(x%2!=y%2)
i++;
x/=2;
y/=2;
}
return i;
}
使用一个for循环,当x,y都为0是结束,为此循环进行以此判断,这个判断的意义就是x,y二进制的相同位是否相等,不相等那就计数一次,然后对x,y除以二以便于下次循环求二进制。
另一种方法就是不直接对x,y的二进制进行比较而是通过异或对两个数据进行合成,异或的意义就是当相同位相同时为0,不相同时为1;进行异或之后只需要记录数据中1的个数就能得到汉明距离。
这也就有牵涉到了计数问题,其实大多数编程语言都内置了计算二进制表达中 11 的数量的函数。在工程中,我们可以直接使用内置函数。
int hammingDistance(int x, int y) {
return __builtin_popcount(x ^ y);
}其中__builtin_popcount(x ^ y);函数就是内置计数函数。当然可以自己写一个函数来进行计数
例如使用移位进行计数
int hammingDistance(int x, int y) {
int s = x ^ y, ret = 0;
while (s) {
ret += s & 1;
s >>= 1;
}
return ret;
}
当然对于我这样的小白还是对循环体情有独钟,具体代码就不在写了,这是一道难度并不大的题,但是能激发我们更多的编程思路,尽可能的简化代码。
边栏推荐
- ES6 syntax notes (ES6~ES11)
- 虚拟机栈帧结构
- Delete all files containing a keyword in the current path
- MindSpore 提 PR 全流程
- 服务器基础知识:包含基本概念,作用,服务器选择,服务器管理等(学习来自米拓建站)
- 【已解决:el-input标签无法输入或不显示文字】
- VsCode打开终端的方法
- c语言编程练习
- Deep Interpretation of void (*signal(int , void(*)(int)))(int) in "C Traps and Defects"
- OpenLayers 初学者指南,源码测试可用
猜你喜欢

【江科大自化协stm32F103c8t6】笔记之【入门32单片机及利用TIM输出比较配置PWM】

led闪烁

Cannnot download sources不能下载源码百分百超详细解决方案

QT serialization 1: readyRead() function, the solution to incomplete data subcontracting

The most complete difference between sizeof and strlen, as well as pointer and array operation analysis

vscode 设置 sublime 的主题

FPGA parsing B code----serial 2

无法完成包的安装npm ERR! Refusing to install package with name “moment“ under a package also called “moment“

【markdown常用用法】
![[Quick MSP430f149] Notes on learning MSP430f149 during the game](/img/06/741c609b24be007718091b8348666c.png)
[Quick MSP430f149] Notes on learning MSP430f149 during the game
随机推荐
删除当前路径下含某个关键字的所有文件
【江科大自化协stm32F103c8t6】笔记之【入门32单片机及利用TIM输出比较配置PWM】
PCB 一分钟科普之你真的懂多层板吗?
>>> /deep/ ::v-deep 深度作用选择器
Vim查找字符
This beta version of Typora is expired, please download and install a newer;解决方法
MindSpore 提 PR 全流程
[Jiangsu University Automation Association stm32F103c8t6] Notes [Initial 32 MCU and EXTI External Interrupt Initialization Parameter Configuration]
Duplicate keys detected:‘/da…‘
Insertion Sort in Classic Sort
VSCode hides the left activity bar
QT serial port dynamically displays a large number of data waveform curves in real time (5) ======== "Final perfect solution version"
JS的值和引用,复制和传递
xftp的简单使用
About map custom sorting of keys
openssl1.1.1ARM dual compilation
openssl 1.1.1编译语句
【已解决:el-input标签无法输入或不显示文字】
vscode 设置 sublime 的主题
自定义类加载器