【简单】191. 位1的个数(汉明重量)常规+位运算解法(所谓简单可它真的简单吗?)

移动通信中的信道编码基础 线性分组码 假设信源输出为有限域GF(2)上连续的二元符号序列,称为消息序列。 在分组码中每一个消息分组含有k个信息比特,一共有2k个不同的消息,对应2k个不同的码字。所有码字的集合构成一个(n,k)分组码。其中参数n称为码长,k称为码的维度或消息长度,由编码器产生的n-k个添加到每个输入消息中的消息比特称为冗余比特。码率R=k/n,可以解释为每一个码比特所携带的平均信息比特数。 1. 最小汉明距离 汉明重量:表示一个码字中非零元素的个数。 重量分布:用Ai表示分组码中汉明重量为i的码字数,数A0,A1, 阅读详情

【题目】
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
来源:leetcode
链接:https://leetcode-cn.com/problems/number-of-1-bits/
【示例1】
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
【示例2】
输入:00000000000000000000000010000000
输出:1
【示例3】
输入:11111111111111111111111111111101
输出:31
【代码】
其实出题者本意不是让你用这种方式,虽然能做出来

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int cnt=0;
        while(n){
            if(n%2)
                cnt++;
            n/=2;
        }
        return cnt;
    }
};

【位运算解法】
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗 :6.1 MB, 在所有 C++ 提交中击败了100.00%的用户

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int m=0;
        for(;n;m++)
            n&=n-1;
        return m;
    }
};

【知识点】
关于位运算,任意数字n,对其进行n&(n-1)操作,都会将n的最后一个数字变为0
【逐位判断】
执行用时 :4 ms, 在所有 C++ 提交中击败了58.01% 的用户
内存消耗 :6 MB, 在所有 C++ 提交中击败了100.00%的用户

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int mask=1;
        int cnt=0;
        for(int i=0;i<32;i++){
            if(n&mask)
                cnt++;
            n>>=1;
        }
        return cnt;
    }
};
什么是汉明重量 191. 位1的个数 【简单题】【位运算】 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。 输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串 0000000000000000000000001000. 阅读详情

相关推荐

汉明权重(hamming weight) ----- 计算数据位中1的个数

汉明重量是一串符号中非零符号的个数。因此它等同于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离,是两个字符串对应位置的不同字符的个数)。在最为常见的数据位符号串中,它是1的个数。 本文参考文章1 文章2 在wiki百科中给出,计算1的个数,目前来说最好的是按照树状进行相加(当然比遍历要快很多,遍历就相当于一棵极不平衡的数) 下面是variable-precision SWAR算法的实现: uint32_ t swar (uint32_ t i) { //步骤1 .

Yannie's Blog 5831

汉明重量&汉明距离&译码与纠错

不是零矩阵,则称非零码字中非零元的数量为该码字的汉明重。(当然这其实也不一定,但是信道恰好把一个码字变为另一个码字的概率也不是很大);(时刻不要忘记我们是在二元域上讨论的,这也是二元域加法定义的好处)。所以传输过程中错的位数应该很少,错得越少的概率越大。不过即使如此,不同的错误图样仍然有可能诱导出不同的伴随子,究其原因,由上述定义可知,一个线性码的最小汉明重等于码字集中的最小汉明距离。是一个只与发生错误的位置有关的向量,称为监督子,校验子或伴随式,求和号表示的是普通的加法,而求和号里面是二元域的加法。

Frost_Descent的博客 2101

191. 位1的个数【汉明重量】【简单】【二进制】

191. 位1的个数【汉明重量】【简单】【二进制】

pre_eminent的JAVA学习园地 309

信道编码之汉明码

信道编码之汉明码基本思路分组码码字的汉明重量码字的汉明距离线性分组码中最小汉明距离与检错纠错的能力的关系线性分组码的编码监督矩阵生成矩阵线性分组码的译码错误图样伴随式和译码汉明码汉明限完备码汉明码 基本思路 按一定的规律在发送的信息码元中加入一些冗余的用来检错纠错的监督码元(校验码元)。 ·牺牲有效性来换取可靠性的提高 ·利用监督码元与信息码元的关系在接收端检错纠错 分组码 信息序列每k位划分为一组,k个码通过一定的规则产生r个监督码元。 ·编码效率:η=k/n 码字的汉明重量 码字中非零码元的数量,简称码

weixin_42219291的博客 4595

【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍_nbiot ntn

在3GPP R17协议中,将NB-IoT集成到了NTN(非陆地网络,即卫星通信)中,并定义了一个系统架构。在这个架构中包括一个可配置再生payload的低轨道(LEO)卫星,这意味着该卫星可以执行传统基站的全部或部分功能。该系统架构还可以适配同步轨道(GEO)卫星,这些卫星与LEO卫星类似,也可以配置再生payload。系统高度范围轨道波束覆盖范围LEO300~1500km绕地球转100~1000kmGEO35786km与地球自转同步200~3500km。

2401_84010302的博客 3570

Synopsys SpyGlass 进行 RTL 功耗估计

通过上述脚本,您可以使用 Synopsys SpyGlass 对纯 RTL 代码和带有 FSDB 波形的 RTL 代码进行功耗估计,并支持将 SDC 文件转换为 SGDC 文件。

yumingqinglong的博客 2187

位运算优化汉明重量求解过程

本文主要介绍汉明重量的c++解法,是经典的算法问题,包括基本解法和位运算优化两个解法,其中后者的时间复杂度为log(n)级别。相关例题如leetcode191.位1的个数等。

yjjgoodbay的博客 589

Windows 11 24H2 系统下,保姆级安装华为 eNSP 模拟器(含依赖软件下载与避坑指南)

本文提供Windows 11 24H2系统下华为eNSP模拟器的完整安装指南,涵盖系统配置调整、依赖软件安装及常见问题解决方案。特别针对新版系统的兼容性问题,提供详细的避坑步骤和优化建议,帮助网络工程师顺利完成eNSP模拟器的部署与使用。

weixin_42567752的博客 431

汉明重量(Hamming Weight)以及 redis的bitcout底层

汉明重量(Hamming Weight)以及 redis的bitcout底层

Sword52888的博客 3039

GPU运维面试题

【代码】GPU运维面试题。

u011220233的博客 700

用STM32F103单片机控制电调制动无刷电机

用电调控制无刷电机制作遥控飞艇 蓝牙控制 调控电调 无刷电机 用电调控制无刷电机制作遥控飞艇 代码区 mian.c #include "delay.h" #include "sys.h" #include "usart.h" #include "usart3.h" #include "timer.h" #include "led.h" #include "key.h" int main(v...

子非鱼 的博客 2万+

一文详解“位运算“在算法中的应用

位运算的相关介绍、LeetCode相关刷题

我要学编程的博客 3615

Tessent ATPG进阶:解锁多种Fault Model的工程实践与选型指南

本文深入探讨Tessent ATPG中多种Fault Model的工程实践与选型策略,涵盖Stuck-at、Transition、Bridge等核心模型的应用场景与配置技巧。通过实际案例解析,展示如何组合不同Fault Model提升芯片测试覆盖率,特别针对汽车电子、超低功耗芯片等复杂场景提供专业解决方案。

weixin_30219613的博客 200

Leetcode191--位1的个数(含多种解法和图解分析)

Leetcode191–位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 作者:黑暗主宰 邮箱:shengzhanhe@gmail.com 文章目录Leetcode191--位1的个数题目描述解题思路 Leetcode191–位1的个数 题目描述 原题链接: ​ https://leetcode-cn.com/problems/...

EngineerHe的博客 726

Ubuntu 22.04 局域网安装GitLab

下面直接给你一份。

u013250861的博客 672

基于STM32的智能血氧、心率、体温、血压监测系统

摘要:本文设计了一款基于STM32F103C8T6的多功能健康监测系统,可实时检测血氧、心率、体温和血压四项生理参数。系统集成MAX30102、DS18B20等传感器模块,采用OLED显示和蓝牙无线传输技术,实现一键血压测量、阈值报警及手机APP数据管理功能。硬件设计包含传感器采集、电源管理、显示报警等模块;软件采用模块化架构,实现数据采集处理、蓝牙通讯等功能。测试表明系统测量准确可靠,为家庭健康监测提供了便携解决方案。未来可扩展更多监测参数和智能分析功能。

3254968421的博客 772

【每日一道LeetCode】——191. 位1的个数

【每日一道LeetCode】——191. 位1的个数

yanxiang3306 2202

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

位运算题目:位 1 的个数

这道题要求返回给定的整数nnn的二进制表示中的111的个数。部分编程语言有自带的方法或函数可以实现该功能,例如 Java 的。面试的时候,面试官不会允许直接调用编程语言自带的方法或函数得到给定整数的二进制表示中的111的个数,而是期望看到面试者使用位运算实现该功能。

stormsunshine的博客 749

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode 191. 位1的个数(Hamming Weight)——三种解法详解(C语言)

本文介绍了计算整数二进制表示中1的个数(汉明重量)的三种方法:1.逐位判断法:通过n&1和右移操作逐位检查,时间复杂度O(32);2.Brian Kernighan算法(最优):利用n&(n-1)每次消除最右侧的1,时间复杂度O(k),k为1的个数;3.查表法:预处理0-255的汉明重量,适合多次调用场景。重点推荐Brian Kernighan算法,因其简洁高效,是位运算的经典技巧,适用于多个相关问题。掌握n&(n-1)这个核心操作对解决位运算问题至关重要。

2302_80441878的博客 636

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

leetcode 算法题191 (简单047) 位1的个数

leetcode 算法题191 (简单047) 位1的个数 题目介绍 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。 ...

FYuu95100的博客 256

LeetCode 191. 位1的个数:两种解法详解

本文介绍了LeetCode 191题(位1的个数)的两种解法。暴力遍历法通过逐位判断1的个数,简单易懂但效率一般;高效位运算法利用n&(n-1)技巧,每次消除最右边的1,循环次数等于1的个数,是最优解。两种方法对比展示了位运算优化的核心思想:前者适合新手理解二进制基础,后者体现了位运算的高效特性。文章还分析了两种解法的时间复杂度、适用场景及注意事项,帮助读者掌握位运算的关键技巧。

2401_86788218的博客 437

191. 位 1 的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。本题主要是对整数的二进制位进行操作和统计,可通过位运算来实现对二进制位中 1 的计数。

qq_40844444的博客 969

LeetCode191-位1的个数

LeetCode191-位1的个数 题目 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。 输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串 00000000000000000000000010000

viva_la__vida的博客 198

[LeetCode]191. 位1的个数

题目 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。 示例 2: 输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串 00000000000000000000000010000000 中,共有

zaker123的博客 280

191.位1的个数(位运算)

位1的个数(位运算) 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 位运算 & 与 两者都为1,结果才为1; (1).清零 a&0=0 (2).判断某一位是否为1 10000111 & 10000000= 10000000 ; 00000111 & 10000000 = 0 (3).取一个数字的指定位 a&0000 1111,取a都后四位 (2)(3)一个意思 (4).

AjwlForever虞启贤的微博 310
上一篇: 【简单】559. N叉树的最大深度
下一篇: 【简单】181. 超过经理收入的员工
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值