C++求解汉明距离

news2024/11/25 10:39:17

目录

  • 汉明距离介绍
  • 汉明距离应用
  • 解法1:Brian Kernighan算法
  • 解法2
  • 解法3


汉明距离介绍

leetcode 461 汉明距离,难度:简单

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

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

示例 1:

输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)

对应二进制位不同的位置个数为2

示例 2:

输入:x = 3, y = 1
输出:1

提示:

0 <= x, y <= 231 - 1

汉明距离应用

汉明距离广泛应用于多个领域。在编码理论中用于错误检测,在信息论中量化字符串之间的差异。

两个整数之间的汉明距离是对应位置上数字不同的位数。

解决此题,可以使用异或运算,当对应的二进制为不同时,输出为1,然后统计异或后1的个数。

统计二进制中1的个数,主要有3种方法:

  • Brian Kernighan算法,
  • 移位运算
  • 直接使用系统API.

下面分别介绍这3种算法

解法1:Brian Kernighan算法

Brian Kernighan算法可以用于清除二进制数中最右侧的1。Brian Kernighan算法的做法是先将当前数减一,然后在与当前数进行按位与运算。

x=x&(x-1)

示意图
在这里插入图片描述
x&(x-1)的结果变成了1110

利用此算法我们可以统计一个数字的二进制中的1的个数,即一比特数:

#include <iostream>

using namespace std;

int oneCounts(int num) {
    int ones = 0;

    while (num > 0) {
        num &= num - 1;
        ones++;
    }

    return ones;
}

int main()
{
    int num = 23;  // 1 0111

    cout << oneCounts(num) << endl;

    return 0;
}

对应的此题的解法

class Solution {
public:
    int hammingDistance(int x, int y) {
        int s = x ^ y, ret = 0;
        while (s) {
            s &= s - 1;
            ret++;
        }
        return ret;
    }
};

复杂度分析

时间复杂度:O(logC),其中 C 是元素的数据范围;
空间复杂度:O(1)。

确实简单,简单的前提是得知道Brian Kernighan算法.

解法2

不知道Brian Kernighan算法也可以解决。
使用异或运算,记 s = x⊕y,我们可以不断地检查 s 的最低位,如果最低位为 1,那么令计数器加一,然后我们令 s 整体右移一位,这样 s 的最低位将被舍去,原本的次低位就变成了新的最低位。我们重复这个过程直到 s=0 为止。这样计数器中就累计了 s 的二进制表示中 1 的数量。

代码

class Solution {
public:
    int hammingDistance(int x, int y) {
        int s = x ^ y, ret = 0;
        while (s) {
            ret += s & 1;
            s >>= 1;
        }
        return ret;
    }
};

代码说明s&1, 如果最末位是1,那么s&1 = 1, ret += 1,否则ret += 0, 然后s右移一位。

解法3

使用系统内置API: __builtin_popcount, 该函数可以统计二进制数中1的个数,但是仅在gcc/g++下可使用。
代码

#include <iostream>

using namespace std;

class Solution {
public:
    int hammingDistance(int x, int y) {
        return __builtin_popcount(x ^ y);
    }
};

int main(){
    Solution s;

    cout << s.hammingDistance(1, 4) << endl;

    return 0;
}

虽然这是一道简单题,但是并不简单,leetcode没哪道题简单。

本文参考资料
(1)https://leetcode.cn/problems/hamming-distance
(2)https://zhuanlan.zhihu.com/p/498119781

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计Springboot电影推荐网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

APS软件的技术指标与特色

企业可能经常会因为无法掌握生产制造现场的实际产能状况及物料进货状况&#xff0c;导致物料及产能规划与现场详细作业排程难度增大&#xff0c;从而采取有单就接的接单政策与粗估产能的生产排程方式。这种方式就可能导致企业的生产状况频发&#xff1a;在提高对顾客的服务水平…

【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码和演示视频)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、需求描述 想必大家都见过商场里的智能语音机器人&#xff0c;你对它提问时它可以自动回答你的问题&#xff0c;接下来我们也实现这样一个机器人&#xff0c;它依靠语音技术完成问询服务 基本功能如下 1&#xff1a;接收人们…

锦江酒店(中国区):在变革中拥抱未来 实现高质量发展

过去十年&#xff0c;中国酒店业经历了规模急剧扩张的黄金时期。后疫情时代&#xff0c;酒店行业正在发生深刻变革。 2022年&#xff0c;面对诸多外部不确定性&#xff0c;国内企业均感受到挑战。如何做到在国内大循环为主体、国内国际双循环相互促进的全新格局下高质量发展&a…

Java+JSP基于ssm共享充电宝管理系统-计算机毕业设计

项目介绍 本共享充电宝管理系统主要包括系统用户管理模块、维护人员模块、投放信息管理、区域信息管理、使用记录管理、登录模块、和退出模块等多个模块,系统采用SSM(springMvcspringMybatis)框架进行开发,本系统使用mysql,开发工具支持eclipse idea myeclipse等主流开发工具i…

点云库PCL学习——点云的格式、PCD文件的打开和显示

1、主要参考 (1)格式说明&#xff1a; 点云库PCL学习——点云的格式、PCD文件的打开和显示 ROS知识&#xff1a;点云文件.pcd格式_无水先生的博客-CSDN博客_pcd文件 &#xff08;2&#xff09;点云滤波&#xff0c;对nan的滤波 Python点云数据处理(三)滤波与RANSAC分割 - …

Bootstrap学习从一个模板开始

开源代码&#xff1a; BootstrapDash/celestialAdmin-free-admin-template: Celestial Free Bootstrap Admin Dashboard Template (github.com)https://github.com/BootstrapDash/celestialAdmin-free-admin-template 作为一个新手&#xff0c;知识还停留在简单的HTMLJSCSS的h…

2022王道计组 chap1 计算机系统概述

2022王道计组 chap1计算机系统概述 1.1 计算机发展历程 本节思维导图 知识点 [计算机系统] 计算机系统 硬件 软件 计算机性能的好坏取决于“软”“硬”件功能的总和 硬件&#xff1a;计算机的实体&#xff0c;如主机、外设等 发展变化&#xff1a;见思维导图 软件&#xf…

智能计量系统配套设备有哪些

智能计量系统配套设备 地磅区域安装配套设备包含&#xff1a;微波定位仪、视频监控、道闸、LED显示屏、车号识别、语音对讲、音响设备、红绿灯、刷卡机箱、雷达、补光灯。 硬件设备 1、微波定位仪&#xff1a;通过微波定位仪设备&#xff0c;可以判断车辆是否完全上磅。 2、…

【Java-Web】利用Session和Filter进行权限管理

目录 1.Cookie 概念 优势和不足 2.Session 3.用Session实现登陆 概念 代码 4.使用Filter实现过滤 在使用浏览器的时候&#xff0c;浏览器如何保存我们的个人信息呢&#xff1f;有两种方法&#xff0c;一个是Cookie&#xff0c;一个是Session&#xff0c;区别在于&#x…

详解设计模式:适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;又称为变压器模式&#xff0c;是 GoF 的 23 种设计模式中的一种结构型设计模式。适配器模式 的功能是将一个类的接口变成客户端所期望的另一种接口&#xff0c;从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工…

双十二选什么牌子的led台灯质量好?2022最新几款真的能护眼的台灯推荐

说到led台灯&#xff0c;那么护眼灯必然是不能忽视的存在&#xff0c;现在市面上的大多数护眼台灯都是使用led灯珠作为发光源&#xff0c;这不仅是因为其高效节能、绿色环保的特性&#xff0c;更重要的是具有很多种保护眼睛的效果。 比起传统的卤素灯或者白炽灯&#xff0c;led…

计算机程序语言的执行过程(个人简单理解)

各种程序语言都只能转换为“机器语言”才能执行 现在的编程语言多种多样&#xff0c;例如&#xff0c;汇编语言&#xff1b;c语言&#xff1b;c&#xff0c;Java&#xff0c;python 语言发展的过程 除了机器语言外&#xff0c;其他语言转换为二进制机器语言 这里要明白两种将…

R语言深度学习不同模型对比分析案例

介绍 深度学习是机器学习最近的一个趋势&#xff0c;模拟高度非线性的数据。在过去的几年中&#xff0c;深度学习在各种应用中获得了巨大的发展势头&#xff08;Wikipedia 2016a&#xff09;。其中包括图像和语音识别&#xff0c;无人驾驶汽车&#xff0c;自然语言处理等等。 …

Allegro输出带等长规则的Excel操作指导

Allegro输出带等长规则的Excel操作指导 Allegro可以输出带等长规则的Excel文件,方便检查和查阅,具体操作如下 打开规则管理器 选择Relative Propagation Delay 选择需要输出的match group-expand展开所有规则 菜单选择Tool-Excel 出现一个对话框,选择Active worksheet,…

德国质量链接中国速度,奥迪一汽新能源汽车有限公司在电动化赛道上全速奔跑

&#xff08;图片一&#xff1a;奥迪一汽新能源汽车有限公司经管会成员暖封闭启动仪式环节合影&#xff09; 长春&#xff0c;2022年11月21日——11月21日&#xff0c;奥迪一汽新能源汽车有限公司举行了伙伴共进暨暖封闭仪式。随着暖封闭的顺利完成&#xff0c;奥迪一汽新能源…

JAVA并发编程--4.1理解Condition

背景&#xff1a;Condition 多线程条件并发控制&#xff0c;与Lock配合可以实现等待/通知模式&#xff1b; 1 condition 使用demo&#xff08;生产者与消费者模型&#xff09;&#xff1a; package org.lgx.bluegrass.bluegrasscoree.util.testcondition;import java.util.Ar…

java 每日一练 (5)

java 每日一练(5) 文章目录单选不定项选择题编程题单选 1.下面的程序 编译运行后&#xff0c;在屏幕上显示的结果是&#xff08;&#xff09; A&#xff1a; 0 B &#xff1a; 2 C&#xff1a; 5 D &#xff1a;80 5的二进制 &#xff1a; 0101   右移 >>: 最右侧位不…

_gdb和进程概念

gdb 在windows下的vs2013下&#xff0c;我们可以进行调试&#xff0c;方便我们了解程序的具体的运行步骤和存在的问题&#xff0c;那么在Linux中&#xff0c;也存在这样一种调试机制&#xff0c;gdb就是在Linux系统下的调试指令。 Linux下和Windows下的调试的区别 答&#x…

如何在保证身份安全的同时提升员工体验

自疫情以来越来越多的企业员工的工作方式都发生了改版。远程和线上下混合工作形式已经成了新常态&#xff0c;企业员工希望随时随地都能访问其工作资源。而且为了方便办公他们更希望使用多种设备&#xff08;甚至是个人设备&#xff09;来访问公司数据。 运维有小邓 在如此复杂…