leetcod如何实现比特位计数
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,小编给大家分享一下leetcod如何实现比特位计数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题目内容给定一个非负整
千家信息网最后更新 2025年12月03日leetcod如何实现比特位计数
小编给大家分享一下leetcod如何实现比特位计数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、题目内容
给定一个非负整数 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++ 中的 __builtin_popcount)来执行此操作。
二、解题思路
动态规划,i>>1指的是i右移一位,这样的话i的最低位会被去掉,因此i与i>>1相当于比较最后一位是否为1;
当 i 的最低位为0,则 i 和i >> 1中1的个数是一样的,因为0不算进计算1的个数;
否则,最低位为1,1相当于被抹掉了,因此 i >> 1中1的个数加1就是i 中1的个数;
三、代码
class Solution: def countBits(self, num: int) -> list: dp = [0 for _ in range(num + 1)] for i in range(num + 1): i_last_num = i & 1 # 得到i的末位数字 if i_last_num == 0: dp[i] = dp[i >> 1] else: dp[i] = dp[i >> 1] + i_last_num return dpif __name__ == '__main__': s = Solution() num = 5 ans = s.countBits(num) print(ans)
以上是"leetcod如何实现比特位计数"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
个数
最低
内容
篇文章
复杂
复杂度
数字
时间
示例
C++
输入
输出
这样的话
不怎么
二进制
代码
函数
动态
大部分
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
鳄梨测试服务器
国家网络安全法规定倡导什么
云服务器售价
掌纹数据库
林业网络安全风险研判报告
网络安全舆情应对的主要措施有
甜橙软件开发工作室
2020软科网络安全
什么是数据库标志符
手游全球统一服务器
广西2u工控服务器机箱厂商
清远网络安全公司
初中毕业能学软件开发吗
网络安全工程师的项目实例
网络安全防护方案费用
软件开发培训学校是正规学校吗
深圳特博网络技术有限公司
如果数据库互查
东莞智能软件开发电话
数据库同步软件免费最新版
数据库管理系统的优势
无尽的拉格朗日服务器刷新
台式机当服务器推荐
起航网络安全手抄报
数据库信息要收集哪些
暴雪服务器忙
深圳电力应急网络技术开发动态
方舟服务器人物等级设置工具
高跟视频软件开发
我的世界不需要网络的服务器