news 2026/5/23 15:43:27

LeetCode 461 - 汉明距离

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 461 - 汉明距离


文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码分析
      • 为什么一定要用异或?
      • 怎么数 1 的个数?
    • Swift 可运行 Demo 代码
    • 代码逐步解析
    • 示例测试及结果
    • 与实际场景结合
    • 时间复杂度
    • 空间复杂度
    • 总结

摘要

汉明距离这道题,属于那种题目极短、考点极准的类型。

表面看是在让你数二进制里有多少位不一样,但实际上是在考你对位运算的理解是否到位
如果你在写业务代码时对位运算有点“下意识躲开”,那这道题正好是一个非常好的切入口。

描述

题目给你两个整数xy,要求你算它们的汉明距离

什么叫汉明距离?说人话就是:

把两个数都转成二进制,从低位到高位一位一位对比,有多少位不一样,就是多少。

举个最直观的例子:

x = 1 -> 0001 y = 4 -> 0100

你会发现有两位不同,所以结果是2

这类问题在实际开发中其实并不陌生,比如:

  • 判断两个配置标志位差异
  • 计算数据版本变更程度
  • 网络协议中校验位的差异判断

题解答案

这道题最标准、最推荐的解法只有一句话:

先做异或,再数 1 的个数

原因很简单:

  • 异或(XOR)有一个非常好的性质

    • 相同位:0
    • 不同位:1
  • 所以x ^ y的二进制中,有多少个1,就是汉明距离

题解代码分析

为什么一定要用异或?

假设有两个位:

xyx ^ y
000
110
011
101

你会发现:

  • 异或的结果,刚好标记了所有“不同的位置”
  • 不需要你手动逐位比对

这是位运算里最“干净”的用途之一。

怎么数 1 的个数?

有两种常见方式:

  1. 循环右移,一位一位数
  2. 使用经典技巧:n & (n - 1)消掉最低位的 1

这里我推荐第二种,既高效又优雅。

Swift 可运行 Demo 代码

importFoundationclassSolution{funchammingDistance(_x:Int,_y:Int)->Int{varn=x^yvarcount=0// Brian Kernighan 算法whilen>0{n&=(n-1)count+=1}returncount}}

代码逐步解析

varn=x^y

这一步是整个解法的核心。

  • n的每一位为 1,代表xy在该位不同
whilen>0{n&=(n-1)count+=1}

这段代码的作用是:

  • 每执行一次,都会把n最右边的一个 1 变成 0
  • 执行多少次,就说明原来有多少个 1

这比“循环 32 次逐位判断”要高效得多,尤其在 1 很少的情况下。

示例测试及结果

letsolution=Solution()print(solution.hammingDistance(1,4))// 2print(solution.hammingDistance(3,1))// 1print(solution.hammingDistance(0,0))// 0print(solution.hammingDistance(7,10))// 3

输出结果:

2 1 0 3

完全符合预期。

与实际场景结合

汉明距离在工程里其实非常常见,只是你可能没注意到名字而已。

几个典型场景:

  1. 特征相似度计算

    • 比如权限位、开关位的差异判断
  2. 网络通信

    • 用来判断数据包头部变化
  3. 版本对比

    • 判断新旧配置差了多少个标志位
  4. 安全领域

    • 判断哈希结果的相似程度(基础概念)

这道题的解法,属于那种:

一旦你记住了,以后在代码里会经常用到。

时间复杂度

O(k)

其中kx ^ y中 1 的个数。

最坏情况下(全是 1),也只是 32 次循环。

空间复杂度

O(1)

只用了几个整型变量,没有任何额外数据结构。

总结

汉明距离这道题,非常适合作为:

  • 位运算入门题
  • 面试中“送分但容易写复杂”的题
  • 提醒自己:位运算并不难,而且很实用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 11:46:48

大数据领域元数据管理的开源工具推荐

大数据领域元数据管理的开源工具推荐关键词:大数据、元数据管理、开源工具、数据治理、数据血缘摘要:本文旨在为大家介绍大数据领域元数据管理的开源工具。在大数据时代,元数据管理就像是数据世界的地图,能帮助我们更好地理解和利…

作者头像 李华
网站建设 2026/5/13 14:21:24

大模型入门实战(非常详细)零基础入门到精通,收藏这一篇就够了

Part.1 什么是生成式AI? **“所有产品都值得用大模型重做一次。”**是近几年在AI圈子非常火爆的观点。 当大家都在热议大模型和生成式AI时,怎么让这些炫酷的技术快速落地,真正帮到商业和社会,成了个大难题。不过,AWS已…

作者头像 李华
网站建设 2026/5/23 15:42:01

【程序员必看】大模型本地化部署指南:macOS系统下LLM运行详解与收藏

本文详细介绍了大模型的基本概念、发展历程和技术原理,重点讲解了在macOS系统下本地运行大模型的实践方法。文章探讨了模型部署中的内存挑战和量化技术(GPTQ、GGML),并通过llama.cpp和whisper.cpp等项目提供了具体的操作指南,帮助开发者在本地…

作者头像 李华
网站建设 2026/5/1 10:36:34

Conda list导出已安装包:Miniconda-Python3.10生成环境快照

Conda list导出已安装包:Miniconda-Python3.10生成环境快照 在科研、AI开发和工程部署中,你是否曾遇到过这样的场景?——同事发来一份PyTorch模型代码,你兴冲冲地运行,结果第一行就报错:“torch not found”…

作者头像 李华
网站建设 2026/5/19 20:58:03

PyTorch autograd机制解析:Miniconda-Python3.10调试梯度计算

PyTorch autograd机制解析:Miniconda-Python3.10调试梯度计算 在深度学习模型的开发过程中,一个看似微小的梯度异常就可能导致整个训练流程崩溃——你是否曾遇到过 loss 突然变为 NaN、参数毫无更新,甚至反向传播时程序静默失败?这…

作者头像 李华
网站建设 2026/5/11 15:10:25

Conda环境克隆技巧:Miniconda-Python3.10快速复制已有配置

Conda环境克隆技巧:Miniconda-Python3.10快速复制已有配置 在人工智能和数据科学项目中,一个让人头疼的常见问题不是模型调参,也不是算力不足,而是“在我机器上明明能跑,在你那边怎么就报错了?”——这种看…

作者头像 李华