leetcod如何实现比特位计数
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,小编给大家分享一下leetcod如何实现比特位计数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题目内容给定一个非负整
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
网络安全学校日文
数据库查询所有人的年龄
新神魔大陆流放罪徒服务器
众创同辉服务器存储专营店
长兴政金互联网科技有限公司
江苏省网络安全短信
松江区网络软件开发品质保障
python做游戏服务器
搞软件开发好不好
摩尔庄园不一个服务器
在网络安全和认证
数据库更新不成功
理想连线网络技术股份怎么样
网络安全是非传统安全威胁吗
服务器的双cpu是如何调用的
微信软件开发周期
吉林省食品安全标准网数据库
无线网络安全设置是什么
移动软件开发课程
农产品检测 大数据库
ibmdb2数据库客户端
百度学术属于科技信息数据库吗
院系网络安全管理制度
方舟pc服务器怎么直连
软件开发和服务业税率多少
网络安全主题班会教学目标
网络安全工程师硕士
软件开发培训机构怎么样
网络安全监察警察
宣城机械软件开发平台