Leetcode338. 比特位计数

问题解决:打开VMware创建的虚拟机,电脑立刻蓝屏并重启 VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credenti 阅读详情

Every day a leetcode

题目来源:338. 比特位计数

解法1:规律(真正的动态规划)

对于整数i(1<=i<=n),

  • 若i为奇数,则i的二进制表示中1的个数一定比前面那个偶数i-1多一1,因为多的就是最低位的1
  • 若i为偶数,则i的最低位一定是0,则其二进制表示中1的个数一定等于i>>1,即i/2

代码:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* countBits(int n, int* returnSize){
    int *ans;
    ans=(int*)malloc((n+1)*sizeof(int));
    ans[0]=0;
    *returnSize=n+1;
    for(int i=1;i<=n;i++)
    {
        if(i%2) ans[i]=ans[i-1]+1;
        else ans[i]=ans[i>>1];
    }
    return ans;
}

结果:
在这里插入图片描述

解法2:Brian Kernighan 算法

相关链接:Brian Kernighan 算法

该算法可以被描述为这样一个结论:

记 f(x) 表示 x 和 x-1 进行与运算所得的结果(即 f(x)=x & (x−1)),那么f(x) 恰为 x 删去其二进制表示中最右侧的 1 的结果。

于是,我们反复对一个数使用Brian Kernighan 算法,直到它为0,使用的次数即为其二进制表示中 1 的个数。

代码:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

//Brian Kernighan 算法
int bk(int x)
{
    int count=0;
    while(x)
    {
        x=x&(x-1);
        count++;
    }
    return count;
}

int* countBits(int n, int* returnSize){
    int *ans;
    ans=(int*)malloc((n+1)*sizeof(int));
    *returnSize=n+1;
    for(int i=0;i<=n;i++)
    {
        ans[i]=bk(i);
    }
    return ans;
}

结果:
在这里插入图片描述

Openbmc系列之自动化测试框架1 Openbmc作为当下BMC固件领域最流行的开源软件,具备从需求计划、开发、调试、测试、版本管理等完整的体系。在测试领域,Openbmc基于python的robotframework框架,实现Openbmc的自动化测试,为高效发布Openbmc版本提供有力支持。本文作为测试系列文档一,介绍Openbmc自动化测试虚拟Openbmc的环境搭建。 阅读详情

相关推荐

SECS/GSM 测试工具 SecsExpress 的配置与实战应用

本文详细介绍了半导体设备通讯测试工具SecsExpress的配置与实战应用。作为专业的SECS/GSM协议调试工具,它能模拟Host与设备端进行双向测试,帮助工程师快速部署、验证通讯链路,并高效排查与RMS系统或真实设备间的联调问题,是提升半导体工厂设备集成与维护效率的利器。

yhn456789的博客 298

【简单】力扣算法题解析LeetCode338:比特位计数

LeetCode 338要求生成0到n的二进制中1的个数数组。需满足: 时间复杂度O(n),空间复杂度O(n); 禁止调用内置函数,需手动实现位计数; 动态规划解法:利用i & (i-1)递推,bits[i] = bits[i & (i-1)] + 1; 边界处理:n=0时输出[0],n=5时输出[0,1,1,2,1,2]。 核心思路 通过位运算性质优化计算:每个数的1的个数等于其最低有效位清零后的结果加1。Java实现仅需一次遍历,高效准确。

ylumwd的博客 1555

数据分析项目:直播电商用户流失分析

其中,'Tenure'(在网时长)可能是影响用户流失的关键因素,意味着用户在平台上的停留时间越长,流失的可能性可能越低,这提示平台应注重提高用户粘性,增加用户在平台上的活跃度和停留时间。)的分析,挖掘用户流失的原因和模式,分析发现用户投诉处理效率(Complain)、距上次消费时长(DaySinceLastOrder)、会员生命周期(Tenure)等8项核心指标对流失预测贡献度达87%,模型准确率94.58%,并提出相应的建议。重视用户的满意度,及时处理用户的投诉和反馈,不断改进平台的服务和功能。

Nervousr的博客 2459

#力扣 LeetCode338. 比特位计数 @FDDLC

题目描述: 338. 比特位计数 - 力扣(LeetCode) (leetcode-cn.com) 自测用例: 0 1 2 3 4 5 9 10 11 19 20 99 100 200 500 999 1000 100000 Java代码: class Solution { public int[] countBits(int n) { int[] ans=new int[n+1]; while(n>0)ans[n]=Integer.b..

LiuXingchang的博客 1398

API安全攻防实战:从信息搜集到漏洞利用的完整路径

本文详细解析了API安全攻防实战的全过程,从信息搜集到漏洞利用,涵盖了渗透测试的核心技巧和工具使用。通过真实案例展示如何发现和利用API漏洞,如HTTP方法滥用、内容类型转换攻击等,并提供企业级防御策略和测试心得,帮助安全研究人员提升API安全防护能力。

weixin_30394981的博客 434

MySQL 8.0数据库崩了别慌!手把手教你仅凭一个.ibd文件找回数据(附Go工具包)

本文详细介绍了在MySQL 8.0数据库崩溃后,如何仅凭.ibd文件恢复数据的完整流程。通过使用Go语言工具包和ALTER TABLE技巧,即使没有备份也能实现数据重生。文章包含从环境准备到数据验证的全方位指导,帮助DBA和开发者应对紧急数据恢复场景。

weixin_29235923的博客 421

力扣(LeetCode)每日随机一题——338.比特位计数[简单]

Brain Kernighan算法、动态规划

Kim-Hyunyeon的博客 533

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1712

golang力扣leetcode 338.比特位计数

338.比特位计数338.比特位计数题解代码 338.比特位计数 338.比特位计数 题解 第一种解法O(nlogn) 第二种解法O(n) 思路:第二种简单的动态规划 代码 package main func count(num int) int { cnt := 0 for num != 0 { num = num & (num - 1) cnt++ } return cnt } func countBits1(n int) []int { result := make([]

清风 479

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen‘s Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen's Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

2401_89898861的博客 1433

YOLOv8交通管理 详细解释及代码完整示例

YOLOv8在交通管理中的应用及代码实现 摘要:本文详细介绍了YOLOv8在交通管理领域的应用场景,包括车辆检测、违规行为识别和行人安全预警等。文章提供了完整的Python代码示例,展示了如何使用YOLOv8进行交通对象检测和车辆计数统计。代码包含模型加载、对象检测、结果可视化等功能模块,并给出了性能优化和功能扩展建议。该实现基于Ultralytics框架,支持多种YOLOv8模型选择,可根据实际需求调整模型大小和检测参数。

u010117029的博客 153

LeetCode第338题_比特位计数

文章摘要 LeetCode第338题"比特位计数"考察二进制表示和动态规划的结合应用。题目要求计算0到n每个整数的二进制中1的个数并返回数组。解析提供了两种高效解法:动态规划+最低有效位法(利用x>>1和x&1的关系递推)和动态规划+最高有效位法(利用最高位性质)。文章包含C#、Python、C++三种代码实现,性能对比显示C++实现最优(4ms),分析了动态规划的时间复杂度O(n)和空间复杂度O(1)。适合算法学习者练习位运算思维和动态规划应用。

qq_40263592的博客 1370

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

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

leetcode338---比特位计数

leetcode338—比特位计数原题链接 题意简述 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 解题分析 位运算 HmDis(int num): 计算数字num其二进制数中的 1 的数...

Again的博客 512

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode:338 比特位计数

LeetCode:338 比特位计数 题目描述 给定一个非负整数num。对于0 到num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例2: 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?...

Sword1996的博客 281

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode、338. 比特位计数【简单,位运算】

LeetCode、338. 比特位计数【中等,位运算】 题目内容:给你一个整数 n ,对于 0

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 1054

比特位计数(Counting Bits)java_leetcode 338

比特位计数(Counting Bits)java_leetcode 338 题干 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为O(n*sizeof(integer))的...

下雨了_简的博客 637

力扣(LeetCode)每日一题338. 比特位计数

338. 比特位计数 问题 给定一个非负整数 num。对于0 ≤ i ≤ num 范围中的每个数字i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗? 要求算法的空间复杂度为O(n)。 你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++

Ackerman2的博客 285

《LeetCode力扣练习》第338题 比特位计数 Java

《LeetCode力扣练习》第338题 比特位计数 Java 一、资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。 示例 1: 输入:n = 2 输出:[0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 示例 2: 输入:n = 5 输出:[0,1,1,2,1,2] 解释: 0 --> 0 1 --> 1 2 --&g

XRT_knives的博客 377

LeetCode 338:比特位计数

题目 思路 考点就是统计1的个数,直接想到的就是n&amp;(n-1),需要遍历所有的数字进行统计,复杂度较高。 在看了别人的做法以后,改了版本2。 规律为: 1.首先考虑数字表示所需的二进制位数,每两个数所需位数相同,比如0和1需要1位,2和3需要2位……每一对数包含一个奇数一个偶数,奇数中包含的1的个数比偶数多1。 2.对于偶数和它右移1位的数字包含1的个数相同。 公式:re...

慢慢积累 1486

leetcode 338. 比特位计数

leetcode 338. 比特位计数 给定一个非负整数num。对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例2: 输入: 5 输出: [0,1,1,2,1,2] leetcode 338 思路 最高有效位 1 0001 2 0010 3 0011 4 0100 5 0101...

语贫 254

Leetcode 338. 比特位计数 C++

Leetcode 338. 比特位计数 题目 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 测试样例 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 题解 动态规划 我们先考虑4个数,0、1、2、3 0(0) 1(1) 2(10) 3(11) 显然,2可以看作是在0的基础上在左边加了一个1;3可以看作是在1的基础上在左边加了一个1。我们现在考虑第i位,假

weixin_43750513的博客 158

【力扣】338. 比特位计数

以下为力扣官方题解 338. 比特位计数题目示例 1:示例 2:进阶:官方题解前言方法一:直接计算代码复杂度分析方法二:动态规划——最高有效位代码复杂度分析方法三:动态规划——最低有效位代码复杂度分析方法四:动态规划——最低设置位代码复杂度分析 题目 给定一个非负整数 numnumnum。对于 0≤i≤num0 ≤ i ≤ num0≤i≤num 范围中的每个数字 iii ,计算其二进制数中的 111 的数目并将它们作为数组返回。 示例 1: 输入: 222 输出: [0,1,1][0,1,1][0,1

qq_45256357的博客 319

LeetCode 338. 比特位计数

原文链接: LeetCode 338. 比特位计数 ...

阿豪 185

leetcode力扣338. 比特位计数

给定一个非负整数num。对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例2: 输入: 5 输出: [0,1,1,2,1,2] class Solution(object): def countBits(self, num): """ ...

kaggle expert,全球排名前1000,清华计算机研究生,兴趣算法工程 519

力扣338比特位计数

摘要:本文提出了一种基于动态规划的算法,用于高效计算0到n每个整数的二进制表示中1的个数。通过分析二进制数的规律,发现当前数的1的个数等于去掉最高位1后的数的1个数加1。利用dp数组存储中间结果,在O(n)时间复杂度和O(n)空间复杂度内解决问题。算法使用位运算判断2的幂次,并通过状态转移方程dp[i] = dp[i-highBit]+1进行计算。该方法相比逐位统计显著提高了效率,适用于大规模数值处理。

2401_89332662的博客 1053

338. 比特位计数(leetcode)

给你一个整数 n ,对于 0

lulutoy的博客 440
上一篇: Leetcode27. 移除元素
下一篇: Leetcode1941. 检查是否所有字符出现次数相同
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值