统计汉明距离

477. 汉明距离总和 本题可利用位运算和组合数学的思想来解决。对于数组中所有数的某一位,统计该位上 0 和 1 的个数,那么这一位对汉明距离总和的贡献就是 0 的个数乘以 1 的个数。两个整数的汉明距离指的是这两个数字的二进制数对应位不同的数量。中任意两个数之间汉明距离的总和。 阅读详情

题目描述

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

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

示例:

输入: 4, 14, 2

输出: 6

解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)
所以答案为:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.

注意:

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

题目分析

按照正常的思路暴力解的话,肯定是双重循环,比较每一个数字与其他未比较过的数字的汉明距离,最后求总和。这样子的话时间效率将会是O(n^2)。然而我们学习算法,当然是追求优化~

下面介绍一种优化的算法:

在计算汉明距离时,我们考虑的是同一比特位上的值是否不同,而不同比特位之间是互不影响的。

对于数组 nums中的某个元素 val,若其二进制的第 i 位为 1,我们只需统计 nums中有多少元素的第 i 位为 0,即计算出了 val 与其他元素在第 i 位上的汉明距离之和。

具体地,若长度为 n 的数组 nums 的所有元素二进制的第 i 位共有 c 个 1,n−c 个 0,则此数组在二进制的第 i 位上的汉明距离之和为 c⋅(n−c)

我们可以从二进制的最低位到最高位,逐位统计汉明距离。将每一位上得到的汉明距离累加即为答案。

具体实现时,对于整数 val 二进制的第 i 位,我们可以用代码 (val >> i) & 1 来取出其第 i+1 位的值。此外,由于 由于 10910^{9}109<2302^{30}230-1 ,意味着第我们可以直接从二进制从右往左数的的第 1 位枚举到第 29 位,第30位肯定为0。

正解代码

class Solution {
    public int totalHammingDistance(int[] nums) {
        int ans = 0, n = nums.length;
        // 从二进制的1位枚举到第29位
        for (int i = 0; i < 30; ++i) {
            int c = 0;
            // 统计 nums 中有多少元素的第 i位为 1
            for (int val : nums) {
                c += (val >> i) & 1;
            }
            // 累加每个位上得到的汉明距离
            ans += c * (n - c);
        }
        return ans;
    }
}

>>是带符号右移, 1&1 = 1 , x & 0 =0

这样子优化后

  • 时间复杂度:O(n⋅L)。其中 n 是数组 nums的长度,L=30

  • 空间复杂度仍然为:O(1)

来源:力扣(LeetCode)

。

Power BI应用案例:淘宝用户行为分析实战 一、案例背景 基于千万级的淘宝用户的使用记录,对淘宝用户的行为进行分析,具体指标包括:日PV、日UV、小时PV、小时UV、不同用户行为的PV、用户购买次数分布、用户购买频次分布、活跃用户消费情况等。通过本案例,可以基本看看Power BI都能分析达到怎么样的效果。 二、数据来源及结构 阿里天池官方发布的1万用户在2014年双十二期间的行为记录,数据量达1200万+。 数据下载地址:... 阅读详情

相关推荐

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2209

对于因果模型的常见评估函数:SHD 和 FDR

结构汉明距离(Structural Hamming Distance) 结构性汉明距离(SHD)是通过邻接矩阵来比较图形的标准距离。它包括计算两个(二进制)邻接矩阵之间的差异:每条缺失或不在目标图中的边缘都被算作一个错误。请注意,对于有向图来说,两个错误可以被计算在内: 错误方向的边是假的,而良好方向的边是缺失的;double_for_anticausal参数说明了这个问题。将其设置为 "假 "将被视为一个错误。 python的SHD调用代码为: cdt.metrics.SHD(target, p

weixin_55703970的博客 3433

语义通信高斯信道仿真代码

【代码】语义通信高斯信道仿真代码。

一去不复返的通信er 427

力扣477(计算两个数组的汉明距离总和)位运算

本体运用位运算,通过遍历列表的每一个元素,并将每一个元素的每一位(0~32)&1 ,得出0和1 个个数,将0个个数和1 的个数相乘即为汉明距离

weixin_46051418的博客 405

F5高可用HA配置详情

F5 HA详细配置

weixin_45843944的博客 3022

DAC8568 Controller

DAC8568 ControllerDAC8568 简介串行接口三级目录 DAC8568 简介 PIN Description Name Description LDAC‾\overline{LDAC}LDAC load DACs SYNC‾\overline{SYNC}SYNC 低电平有效,电平触发控制, 该输入为输入数据的帧同步信号. 当SYNC为低,使能DAC内输入移位寄存器,并在随后的所有时钟沿采样数据。 在第32个时钟之后,DAC更新输出。 若不到32个时钟SYNC被置高(即

u010170039的博客 5129

【猿知识】汉明距离(Hamming Distance)

汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 3万+

无人机中继传输数据链技术,(无人机+自组网)远距离传输技术实现详解

无人机中继传输数据链技术是指利用无人机作为空中移动中继节点,在需要通信的区域上空悬停或移动,以建立和维护通信链路,从而扩展通信范围、提高通信质量和灵活性。1. 通信链路:是无人机中继通信的重要组成部分,包括源节点到中继节点的链路和中继节点到目标节点的链路。同时,它还支持空中到地面的通信,距离大于100km。总的来说,无人机中继传输数据链技术和(无人机+自组网)远距离传输技术都是现代无人机通信领域的重要技术,它们的应用极大地扩展了无人机的通信范围和灵活性,为各种应用场景提供了强有力的支持。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 2079

[算法和数据结构入门][Day19]汉明距离

Day 19:汉明距离 汉明距离应用于很多领域。在编码理论中用于错误检测,在信息论中量化字符串之间的差异 汉明距离 = 两个数字对应二进制位不同的位置的个数 给出两个整数 x 和 y,计算它们之间的汉明距离。 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ...

KaelCui的博客 403

Solidworks曲面建模学习(三)——样条曲线

本文主要演示平面的空间样条曲线的一些绘制。

东东不熬夜的博客 6499

deepstream车道线检测自定义插件化,其中要注意pipeline的配置,如果插件位置配置不对,会报input format should be RGBA when using blur-obje

以上代码中,我们先从对象池中获取一个 DsUserMeta 对象,然后使用 get_lane_line_from_frame 函数获取车道线检测结果,并使用 add_lane_line_meta 函数将其添加到 DsUserMeta 对象中。注意,上述代码中的 get_lane_line_from_frame 函数和 add_lane_line_meta 函数需要你自己实现,用于从视频帧中提取车道线检测结果,并将其添加到 DsUserMeta 中。

pvmsmfchcs的博客 690

什么是汉明(海明)距离?

对于两个长度相同的字符串或二进制序列,汉明距离是它们对应位置上不同字符或不同比特的数量。汉明距离是一种简单但强大的度量方法,广泛应用于文本相似度计算、错误检测、DNA 序列分析等领域。在 SimHash 算法中,汉明距离是判断文档相似性的关键指标。

qq_45973421的博客 1770

yolov5直接调用zed相机实现三维测距(python)

zed代码比较简洁,但是一定要把环境配置好,后续自己会把他当做普通双目标定,去对比分析效果,并完善相关功能。

积极向上的mr.d的博客 1万+

lc461. 汉明距离——异或+统计二进制1个数

统计两个数的二进制不同位的个数,首先就应该想到异或才对,再统计1个数。统计1个数用移位与1与运算应该最高效。

qq_61587494的博客 238

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

乐乐lelele的博客 7184

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetcode.477. 汉明距离总和---排列组合与按位统计

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

xiangguang_fight的博客 215

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Leetcode 477.汉明距离总和

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

weixin_30251587的博客 184

477 汉明距离总和

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

weixin_44171872的博客 205

汉明距离(位运算,清晰图解)

题目 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 2^31. 示例: 解题思路 要找出两个整数对应二进制位不同的位置的数目,对 位运算 有所了解的童鞋,应该会很自然地想到位运算中的 按位异或,通过将两个整数对应二进制位 按位异或(同一位置,元素相同异或得 0 或者得 1) 找到其二进制不同的位置,找到之后,只需要统计异或的结果中 1 的个数即可。 举栗 以 示例 为栗,如

1522

leetcode--461. 汉明距离

计算x和y的异或,结果m的二进制表示中,计算并返回它们之间的汉明距离

2301_81413442的博客 412

LeetCode 461 汉明距离/LintCode 365 统计二进制中1的个数

LeetCode 461. 汉明距离 or LintCode 365. 二进制中有多少个1 题目一:LeetCode 461. 汉明距离 LeetCode 461.明距离(Hamming Distance) 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。 注意 0 ≤ x, y < 2^31. 示例 Java ...

weixin_30791095的博客 124

汉明距离java

1. 汉明距离总和 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中,任意两个数之间汉明距离的总和。 问题分析: 看到这个题,我一眼就想到用for循环,但奈何for循环的时间复杂度太高,因此我放弃了~ 只要你想学习,生命总会有出路的,不巧,光明就在前方——举个梨子: 2 0010 7 0111 3 0011 最高位:三个0,距离为0 次高位:一个1,两个0,距离12 第2位:三个1,距离0 第1位:两个1,一个0,距离21 总和 = 2 + 2 = 4 所以可以看出,

zcc2018的博客 359

从零开始刷力扣(八十五)——477. 汉明距离总和

分类:数与位 题目描述 两个整数的汉明距离指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中,任意两个数之间汉明距离的总和。 注意: 数组中元素的范围为从0到10^9。 数组的长度不超过10^4。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系) 所以答案为: HammingDistance(4, 14) + HammingDistance(4, 2) +...

guxin_duyin的博客 112

JAVA程序设计:汉明距离总和(LeetCode:477)

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

信仰.的博客 510

【LeetCode】【学习笔记】461. 汉明距离

个人算法学习笔记(可能涉及) 1、个人做题思考、做题方法 2、全网对本人有效的学习资源 3、别人的做题方法

Code for fun !!! 【博客主要为本人服务】 172

力扣解题思路:477. 汉明距离总和

477. 汉明距离总和 思路: 最简单的暴力法超时,所以需要换一种思路。我们知道汉明距离就是两个数的不同位的个数,int类型为32位,那么如果要统计所有数之间的汉明距离之和,不妨我们把每个数都拆成32个位,然后一位一位的考虑他们的组合。 对于所有数的第i位,我们只用统计所有数该位为1和为0的个数,因为只有1和0相互组合的取异或才会为1(只有1和0相互组合才算是不同位),其实我们只用统计每一位1的个数,因为0的个数就是数组长减去1的个数: public int totalHammingDistance(int

qq_39879315的博客 191
上一篇: 格雷编码(数组中两个连续的数值的2进制形式仅有一个位数的差异)
下一篇: 课程表,拓扑有向图,广度优先搜索
老邓CODING
博客等级 码龄8年 9粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值