尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

lc:338练习的一点思考

lc:338练习的一点思考
📅 发布时间:2026/6/19 16:39:39

 

public int[] CountBits(int n) {
int[] res = new int[n + 1];
for (int i = 0; i <= n; i++)
{
res[i] = CountOnesWithBitOperation(i);
}
return res;
}
public int CountOnesWithBitOperation(int n)
{
int count = 0;
while (n != 0)
{
n &= (n - 1); // 消除最右边的1
count++;
}
return count;
}

这个算法的时间复杂度我n log n,回顾算法的时间复杂度如何计算,同时记忆这个二进制1数量的计算方法


注意原来的算法实现,CountOnesWithBitOperation中采用i与i-1的与运算消去右端1,这个步骤似乎可以利用到CountBits方法中@_@

关键在于理解 i & (i - 1) 这个位运算操作:
该操作可以消除数字 i 的二进制表示中最右边的 1
因此 res[i] = res[i & (i - 1)] + 1 表示:当前数字的 1 的个数 = 消除最右边 1 后的数字的 1 的个数 + 1

相邻数字或有特定关系的数字之间,比特位数往往存在递推关系

使用动态规划的思想优化后的实现:
public class Solution {
public int[] CountBits(int n) {
int[] res = new int[n + 1];
for (int i = 1; i <= n; i++) {
// i比(i&(i-1))多一个1
res[i] = res[i & (i - 1)] + 1;
}
return res;
}
}

相关新闻

  • JSC2023 Max Degree Sum
  • 2025年燃生物质有机热载体锅炉生产厂家权威推荐榜单:燃生物质热水锅炉/生物质专用锅炉/生物质热水锅炉源头厂家精选
  • 在线文档大全

最新新闻

  • 6个免费方法让你的手机视频秒变MP4 - 软件工具教程方法
  • Kali Linux实战:ARP欺骗攻击原理、环境搭建与Wireshark流量分析
  • 杭州靠谱品牌首饰回收排行,光谱验金透明称重全款现结 - 奢品小当家
  • 2026年安徽省合肥市合肥医药卫生学校招生简章官网发布:报名入口+报考指南 - cc江江
  • 武汉钻石回收怎么选?2026年实测合规机构名录 - 薛定谔的梨花猫
  • 机器学习模型上线后如何应对系统性风险与数据漂移

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号