题目描述:

互娱手撕代码题。

统计从1到n这n个数的二进制表示中1出现的次数。

思路分析:

思路一:直接的做法是从1遍历到n,对于每个数和1做与操作,之后,对于这个数不断做右移操作,不断和1做与操作,直到当前数为0。这样的算法复杂度为O(nlogn)。

思路二:优化时间复杂度,那么考虑用空间换时间。利用n&(n-1)这个操作可以去掉末尾的1。利用递推f(n) = 1+f(n&(n-1))。这样就是利用空间来换时间,时间复杂度为O(n)。

代码:

思路一:

 int numZeros(int n)
{
int res=;
for(int i=; i<=n; i++)
{
while(i>)
{
if(i&==)
res++;
i = i>>;
}
}
return res;
}

思路二:

 int numZeros(int n)
{
vector<int>f(n+, );
int res=;
for(int i=; i<=n; i++)
{
f[i] = +f[i&(i-)];
res += f[i];
}
return res;
}

最新文章

  1. Centos挂载第二块硬盘
  2. Nova PhoneGap框架 第三章 页面
  3. ANNOTATION PROCESSING 101 by Hannes Dorfmann — 10 Jan 2015
  4. Django model.py表单的默认值 默认允许为空
  5. OpenSesame:一个能够攻击fixed-pin设备的工具
  6. php大力力 [024节]PHP中的字符串连接操作(2015-08-27)
  7. 静态HTML页面不缓存js文件的方法
  8. Adding Multithreading Capability to Your Java Applications
  9. 编译安装HTTPD 2.4.9版本
  10. BYTE、WORD与DWORD类型
  11. 分布式缓存BeIT Memcached简介
  12. java日期处理总结(二)
  13. Android Bug 记录
  14. 使用ORACLE SQL Tuning advisor快速优化低效的SQL语句
  15. C/S通信模型和相关技术要点
  16. Read The Docs搭建
  17. 基于springboot的SSM框架实现返回easyui-tree所需要数据
  18. Linux之ansible 常用模块
  19. bat如何实现多台android设备同时安装多个apk
  20. [Oracle]构筑TDE 环境的例子

热门文章

  1. .net core EF Core 视图的应用
  2. A Pattern Language for Parallel Application Programming
  3. C# MySQL,Dapper Trans,list
  4. ConsoleColor原来有16种, enumData.GetValue(i)
  5. Winform中设置ZedGraph的颜色填充使用Fill
  6. Effective Python 编写高质量Python代码的59个有效方法
  7. Winform中使用FastReport的PictureObject时通过代码设置图片源并使Image图片旋转90度
  8. React中的三大属性
  9. 英语JASPERITE碧玉Jasperite单词
  10. Android四大组件:BroadcastReceiver 介绍