力扣每日一题:477.汉明距离总和 字符串矩阵与列表计数器 双解分析!

Hamming Distance (汉明距离) 汉明距离 阅读详情

477.汉明距离总和

https://leetcode-cn.com/problems/total-hamming-distance/

难度:中等

题目:

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

计算一个数组中,任意两个数之间汉明距离的总和。

注意:

  • 数组中元素的范围为从 0到 10^9。
  • 数组的长度不超过 10^4。

示例:

输入: 4, 14, 2

输出: 6

解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2)
 = 2 + 2 + 2 = 6.

分析

如果看过我昨天的解题: 461.汉明距离

那么相信今天的题目,只需要简单思考下,就能解决。 昨天是计算两个数的汉明距离,今天无非多几个。
来一个打一个,来两个打一双,来多少都不够塞牙缝的。

2   (0 0 1 0)
4   (0 1 0 0)
14  (1 1 1 0)
     ↑ ↑ ↑

查看上图,末尾尾数都是0,不存在汉明距离,其他三位都分别存在0和1,那么这个多位该如何算?
让我们把相同的数放在一起 先这样[1] *[0,0],然后在看看一共有几种排列?1的个数 * 0的个数 = 1的个数 * 总数 - 1的个数 = 2 3 * 2 = 6 用例通过。

好了,算法知道了,下来我们来构造矩阵,由于数组元素范围在0 ~ 10 ** 9,10 ** 9 < 2 ** 30.
所以我们构造一个最大1000行的列表,然后计算每一列汉明距离n * (length - n)。
矩阵转置怎么快?zip(*matrix),转换为31 * 1000的矩阵在进行计算。

解题1 二维矩阵:

class Solution:
    def totalHammingDistance(self, nums):
        ret, ln = 0, len(nums)
        matrix = [bin(num)[2:].zfill(31) for num in nums]
        for row in zip(*matrix):
            n = row.count('1')
            ret += n * (ln - n)
        return ret

上面的方法我们最大可能会构造一个31 * 1000的矩阵,那么有没有拿空间换时间的方法呢?
答案是有的,我们维护一个长度为31的全零数组,然后将二进制的字符串进行倒序后,
判断每一位的结果追加至计数列表。最终循环计算列表的总和即可。

解题2 列表计数器:

class Solution:
    def totalHammingDistance(self, nums):
        count_list = [0] * 31
        ret, ln = 0, len(nums)
        for num in nums:
            for index, s in enumerate(bin(num)[2:][::-1]):
                if s == '1':
                    count_list[index] += 1
        for count in count_list:
            ret += count * (ln - count)
        return ret

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown

汉明距离(Hamming Distance)问题的两种解法,C++实现 这是在优快云上的第一篇博客,开篇以C++的位操作的一个题目来打头阵。 阅读详情

相关推荐

R语言计算汉明距离(Hamming Distance)实战

R语言计算汉明距离(Hamming Distance)实战 目录 R语言计算汉明距离(Hamming Distance)实战 #汉明距离(Hamming Distance) #二值向量的汉明距离计算 #数值向量的汉明距离计算 #字符串的汉明距离 #汉明距离(Hamming Distance) 汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为

data+scenario+science+insight 996

【Python】随机矩阵生成,矩阵拉成列向量,转置,统计矩阵中某元素个数,计算矩阵间汉明距离

Python:随机矩阵生成,reshape,转置,统计矩阵中某元素个数,计算矩阵间汉明距离 初学python,遇到了许多问题,在此记录,以便大家共同学习。 本文主要是python矩阵操作的一些基本问题,用到了包为numpy。 一、随机矩阵生成以及reshape、转置问题 python代码 [python] import numpy as np from numpy import

乐乐lelele的博客 7184

手把手教你用Silvaco Atlas复现GaN蓝光LED仿真:从网格划分到光谱分析全流程避坑

本文详细介绍了如何使用Silvaco Atlas进行GaN蓝光LED仿真,从网格划分到光谱分析的全流程避坑指南。重点讲解了网格划分技巧、材料参数设置、极化效应处理以及结果分析方法,帮助用户快速掌握半导体器件仿真技术,提升研发效率。

weixin_42552716的博客 226

汉明距离&汉明重量

例如,假设有两个十进制数a=93和b=73,如果将这两个数用二进制表示的话,有a=1011101、b=1001001,可以看出,二者的从右往左数的第3位、第5位不同(从1开始数),因此,a和b的汉明距离是2。在信息论中,两个等长字符串之间的汉明距离(英语:Hamming distance)是两个字符串对应位置的不同字符的个数。汉明重量是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。

Frost_Descent的博客 1510

拆解大疆Osmo Pocket:聊聊微型云台里那几根比头发丝还细的线,以及它为啥一开机就‘摇头晃脑’

本文深入拆解大疆Osmo Pocket微型云台的精密硬件结构,揭秘其开机自检时‘摇头晃脑’的奥秘。通过分析无刷电机、霍尔传感器和46AWG同轴线等核心组件,展现了大疆在微型云台设计中的工程智慧与创新技术,特别是FOC控制和陀螺仪的应用,实现了0.1°级的姿态控制精度。

weixin_27869497的博客 671

控制障碍函数(Control Barrier Function,CBF) 一、定义

介绍控制障碍函数

Lyajpunov的博客 2万+

距离度量:闵氏、欧式、马氏、余弦、汉明等

目录 1. 闵氏距离(Minkowski Distance) 2. 欧式距离(Euclidean Distance) 3. 标准化欧式距离(Standardized Euclidean distance) 4 马氏距离(Mahalanobis Distance) 1. 闵氏距离(Minkowski Distance) 闵氏距离又叫做闵可夫斯基距离,是欧氏空间中的一种测度,被看做是欧氏距离的一种推广,欧氏距离是闵可夫斯基距离的一种特殊情况。定义式: ...

满腹的小不甘 1万+

UE4_SpeedTree Shader源码分析

目录 1.UMaterialExpressionSpeedTree::Compile 2.Compiler->SpeedTree 3.GetSpeedTreeVertexOffset 4.Scene中的SpeedTree应用 (Scene->UpdateSpeedTreeWind) 5.GetSpeedTreeVertexOffsetInner 由于之后做风场,也需要在S...

zzgyy123的专栏 2632

欧氏距离,曼哈顿距离,闵可夫斯基距离,马氏距离,汉明距离

欧氏距离,曼哈顿距离,闵可夫斯基距离,马氏距离,汉明距离

DDsoup 24小时不打烊芜湖! 4155

【OpenStack】OpenStack原理(一)——OpenStack发展及架构

OpenStack目前的七个核心组件,分别是计算(Compute)、对象存储(Object Storage)、认证(Identity)、用户界面(Dashboard)、块存储(Block Storage)、网络(Network)和镜像服务(Image Service)。

大数据分析BDA 2万+

VTK:vtkAssembly用法实战

VTK:vtkAssembly用法实战程序输出程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkAssembly.h> #include <vtkAxesActor.h> #include <vtkCubeSource.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkOrientation

希望我的博客,能帮上你解决学习中工作中所遇到的问题 936

汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y &lt; 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 class Soluti...

LEGENDA的博客 1064

2026 MCM Problem A:智能手机电池连续时间建模——完整解题思路附第一问解题代码

摘要:本文针对2026年MCM A题"智能手机电池连续时间建模"问题,提出基于能量守恒原理的微分方程模型。通过建立以SOC(t)为状态变量的动态系统,将屏幕亮度、处理器负载等主要耗电因素纳入统一功率框架,实现了不同使用场景下的电量变化精确描述。研究表明,屏幕亮度和CPU负载对续航时间影响最大,温度与后台任务会产生放大效应。该模型具有物理可解释性和应用扩展性,为手机电源管理提供了理论依据。(150字)

一键难忘的博客 771

常见距离及相似性的度量

该文转自:http://blog.csdn.net/beta2/article/details/5045020 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。   本文的目的就是对常用的相似

认知 行动 坚持 9269

《基于FPGA的数字信号处理》专栏的导航与说明

《基于FPGA的数字信号处理》专栏的导航与说明

孤独的单刀 4163

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

力扣(leetcode) 477. 汉明距离总和(暴力异或)(超详细步骤二维矩阵)

题目在这:https://leetcode-cn.com/problems/total-hamming-distance/ 题目分析: 昨天是汉明距离。今天是昨天的升级版求好几个汉明距离的综合。 法一: 思路分析: 根据昨天的异或统计‘1’的方法。这道题很容易的就可以得到思路。直接暴力循环, List = [4, 14, 2] res = 0 for i in range(len(List)-1): for j in range(i+1,len(List)): temp = bin(

深度不学习!!的博客 2219

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

线性分组码最小汉明距离_编辑距离详解

定义编辑距离,也叫莱文斯坦距离(Levenshtein),是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。例子有一个字符串 a='love',b='lolpe'.那么计算a和b的编辑距离,就是要算出从a变化到 b需要经过多少个步骤。1.love->lolve(插入l)2.lolve->lolpe(用v替换成p)那么我...

weixin_39690958的博客 3782

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用Matlab计算各种距离Distance

转自:http://jacoxu.com/%E4%BD%BF%E7%94%A8matlab%E8%AE%A1%E7%AE%97%E5%90%84%E7%A7%8D%E8%B7%9D%E7%A6%BBdistance/ 计算距离的需求有两种:   一种是给定一个特征集合X,然后计算Pairwise距离矩阵,那么可使用D=pdist(X,distance)的方式;   另一种是给定两个对应的特征集合...

不积跬步,无以至千里 3万+

Total Hamming Distance 汉明距离总和

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中,任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系) 所以答案为: HammingDistance(4, 14) + HammingDistance(4, 2) ...

qq_26410101的博客 517

计算两个数的汉明距离

汉明距离的意思是把两个数二进制化,有多少个不同的位,汉明距离就是多少。 intuitive的话,两个数每个位置遍历一遍,然后计数======》naive! 用异或,相同为0,不同为1 a^b,算这个数里面有几个1就可以了。 Python的话比较简单 return bin(x^y).count('1') C++也类似思想 int hammingDistance(int x, int...

Yonggie的博客 3457

汉明距离(Hamming Distance)

汉明距离(Hamming Distance) 定义 汉明距离以美国数学家理查德·卫斯里·汉明的名字命名,表示两个相同长度的字符串在相同位置上不同字符的个数。用d(x,y)来表示x和y两个字符串的汉明距离。汉明距离可以用来计算两个文本之间的相似度,根据不同字符的个数来判断两个文本是否相似。 d(10010,10000)=2 d(abcbc,abdab)=3 计算 根据定义,我们需要统计出相同位置上不同字符的个数,如何判断两个字符是否相同呢?如果两个字符都是数字,可以用a==b来判断,如果两个字符是非数字,可

卡了个卡 1万+

OpenCV图像哈希计算及汉明距离的计算

为什么80%的码农都做不了架构师?>>> ...

weixin_33694172的博客 1298

汉明距离讲解

汉明距离的计算 码字A为 10001001 码字B为 10110001 那么不同的字符数为3,汉明距离就是3 不难看出,汉明距离就是两个码不同的数的个数。 最小汉明距离 在一个码组集合中,任意两个码字之间对应位上码元取值不同的位的数目定义为这两个码字之间的汉明距离。即 d(x,y)=∑xi⊕yi\sum{x_i} \oplus {y_i}∑xi​⊕yi​ 这里i=0,1,…n-1,x,y都是n位的...

zxwsbg的博客 4万+

相似度计算——欧氏距离、汉明距离、余弦相似度

计算图像间的相似性可以使用欧氏距离、余弦相似度/作为度量,前者强调点的思想,后者注重线的思想。 欧氏距离 欧式距离/Euclidean Distance即n维空间中两个点之间的实际距离。已知两个点A=(a1,a2,...an),B=(b1,b2,...,bn)A=(a1,a2,...an),B=(b1,b2,...,bn) A = (a_1,a_2,...a_n),B = (b_1,b_2...

akadiao的博客 4万+

python矩阵想成_Python-如何生成成对汉明距离矩阵

beginner with Python here. So I'm having trouble trying to calculate the resulting binary pairwise hammington distance matrix between the rows of an input matrix using only the numpy library. I'm sup...

weixin_39684898的博客 346
上一篇: 力扣每日一题:461.汉明距离 细说异或与二进制 双解!
下一篇: 力扣每日一题:用两个栈实现队列 详细的思路介绍与逻辑整理!
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值