news 2026/5/29 4:53:15

Counting Bits LeetCode 高效解法解析与位运算技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Counting Bits LeetCode 高效解法解析与位运算技巧

Counting Bits是LeetCode第338题,要求计算从0到给定整数n之间每个数字的二进制表示中1的个数。这个问题看似简单,但高效解法涉及位运算和动态规划的巧妙结合,是面试中考察候选人算法思维能力的经典题目。

counting bits leetcode题目是什么意思

这道题给定一个非负整数n,需要返回一个长度为n+1的数组,其中第i个元素表示数字i的二进制形式中1的个数。例如,当n=5时,二进制表示分别为0(0), 1(1), 2(10), 3(11), 4(100), 5(101),所以应该返回[0,1,1,2,1,2]。题目要求时间复杂度尽可能低,避免对每个数字单独计算。

理解题目后,最直接的思路是对每个数字计算其二进制中1的个数,但这会导致O(nsizeof(integer))的时间复杂度。在实际面试中,面试官通常期待更优的解法,这就需要我们深入分析数字二进制表示的内在规律。

counting bits leetcode如何高效解决

高效解决Counting Bits问题的关键在于发现相邻数字二进制表示之间的关系。通过观察可以发现,对于任意偶数i,其二进制中1的个数等于i/2的二进制中1的个数,因为偶数二进制最后一位是0,右移一位相当于除以2。对于奇数i,其二进制中1的个数等于i/2的二进制中1的个数加1。

基于这个规律,我们可以推导出状态转移方程:bits[i] = bits[i>>1] + (i & 1)。这里i>>1表示i右移一位(即除以2),i & 1用于判断i是否为奇数。这种方法只需一次遍历即可完成计算,时间复杂度为O(n),空间复杂度也为O(n)。

counting bits leetcode动态规划解法

上述解法本质上是一种动态规划思路,其中bits[i]表示状态,即数字i的二进制中1的个数。状态转移基于已计算的较小数字的结果,充分利用了子问题的解。具体实现时,初始化bits[0]=0,然后从1遍历到n,根据状态转移方程计算每个bits[i]。

在实际编码中,这个解法非常简洁高效。Python实现只需几行代码:def countBits(n): bits = [0]

(n+1); for i in range(1, n+1): bits[i] = bits[i>>1] + (i & 1); return bits。这种解法不仅高效,而且体现了将问题分解为子问题并重复利用结果的动态规划核心思想。

你在解决Counting Bits问题时是否考虑过其他优化方法?在实际面试中遇到这道题,你通常会如何向面试官解释解题思路?欢迎在评论区分享你的经验和看法,如果觉得这篇文章有帮助,请点赞和分享给更多正在准备技术面试的朋友。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 2:41:40

PHP消息队列使用教程:Redis/RabbitMQ实现异步处理

消息队列在PHP开发中不是可选项,而是处理高并发、解耦系统组件和实现异步任务的关键技术。它把耗时操作从请求响应链路中剥离,让PHP脚本快速返回,后台任务按顺序可靠执行。我经历过因同步处理导致接口超时的教训,才真正理解消息队…

作者头像 李华
网站建设 2026/5/22 5:30:49

一看就会:verl框架下数据格式转换实操演示

一看就会:verl框架下数据格式转换实操演示 在强化学习驱动的大模型后训练实践中,数据不是拿来就能用的——它必须严格符合框架定义的结构、字段和序列组织逻辑。verl作为专为LLM后训练设计的生产级RL框架,对输入数据有明确且不可妥协的格式要…

作者头像 李华
网站建设 2026/5/20 16:30:47

Win10/Win11防火墙控制软件联网全攻略

微软电脑(Windows 10/11)控制软件联网,优先用系统自带防火墙(免费、无额外安装),进阶可用第三方工具简化操作,以下是完整步骤与推荐方案一、系统自带:Windows Defender 防火墙&#…

作者头像 李华
网站建设 2026/5/20 15:06:07

计算机毕业设计springboot老年医疗保健网站的设计与实现 基于 SpringBoot 的银龄健康云服务平台构建与应用 面向智慧养老的 Java 医疗保健信息门户研发

计算机毕业设计springboot老年医疗保健网站的设计与实现qtbj9zq3 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 我国 60 岁以上人口已超 2.8 亿,慢性病共病、多重用…

作者头像 李华
网站建设 2026/5/21 22:15:01

PHP源码解析:CKEDITOR图片自动上传插件如何实现?

企业网站后台Word/公众号内容导入功能集成项目报告 一、需求分析与技术调研 我作为项目负责人,近期针对企业网站后台管理系统新增的Word粘贴、Word文档导入及微信公众号内容粘贴功能需求展开了全面调研。经过详细分析,总结了以下关键需求点&#xff1a…

作者头像 李华
网站建设 2026/5/20 23:34:34

全网最全专科生必备AI论文软件TOP10测评

全网最全专科生必备AI论文软件TOP10测评 2026年专科生必备AI论文软件测评维度解析 随着AI技术在学术领域的不断渗透,越来越多的专科生开始依赖AI工具提升论文写作效率。然而,面对市场上琳琅满目的论文辅助软件,如何选择真正适合自己的工具成为…

作者头像 李华