经典算法-统计0~n之间的数字二进制的1的个数
来源:互联网 发布:手机淘宝6.5.0旧版本 编辑:程序博客网 时间:2024/05/01 20:16
经典算法-统计0~n之间的数字二进制的1的个数
- 题目描述:
给定一个数字n,统计0~n之间的数字二进制的1的个数,并用数字输出 - 例子:
当n = 5 时 返回的结果应该是:[0,1,1,2,1,2] - 要求:
- 算法复杂度o (n)
- 空间复杂度o (n)
- 思路分析:
- 根据题目的要求,时间和空间复杂度,明显是要用动态规划的方法
- 得出推到公式:f(n) = 不大于f(n)的最大的2的次方+f(k),k一定是再前面出现的,用数组记录,直接查询
- 举例 f(5) = f(4) + f(1), 注意2的次方都是一个1,而且是最高位,f(5) = 1 + f(1), f(6) = 1 + f(2)直到f(8) = 1
public int[] countBits(int num){ int[] res = new int[num + 1]; int pow2 = 1; int before = 1; for(int i = 1; i <= num;i++){ if(i == pow2){ before = res[i] = 1; pow2 <<= 1; }else{ res[i] = res[before] + 1; before += 1; } } return res; }
原文描述:
Given a non negative integer number num. For every nubmers i in the range 0 <= i <= num calculate the number of 1's in their binary representation and return them as an array.
Example:
For num = 5 you should return [0,1,1,2,1,2]
Follow up:
it is very easy to come up with a solution with run time O(n * sizeof(integer)).But can you do it in linear time O(n) / possibly in a single pass?Space complexity should be O(n).Can you do it like a boss? Do it without using any builtin function like builtin popcount in c++ or in any other language.
1 0
- 经典算法-统计0~n之间的数字二进制的1的个数
- 统计0到n之间1的个数
- 统计0到n之间1的个数[数学]
- 统计0到n之间1的个数
- 统计0到n之间1的个数
- 统计0到n之间1的个数
- 统计1到n之间的所有数字中1出现的个数
- 统计1到n之间的所有数字中1出现的个数
- 统计1到n之间的所有数字中1出现的个数
- 统计1到n之间的所有数字中1出现的个数
- 统计整数n的二进制表示中1的个数
- 统计1到N之间所有数字中1的个数
- 算法题:求N!末尾0的个数和求二进制数中1的个数
- 计算二进制形式中1的个数的经典算法
- 计算1 到 N 之间 某个数字出现的个数
- 华为机试题---统计一个数字转为二进制0和1的个数
- 经典算法——二进制中1的个数
- 经典算法一个数二进制中1的个数
- Java += 操作符实质
- launcher widget如何加载自定义视图
- ERROR ITMS-90096: Your binary is not optimized for iPhone 5 错误
- Http请求与响应基础讲解
- 当java碰到防火墙
- 经典算法-统计0~n之间的数字二进制的1的个数
- springMVC-mvc:view-controller path使用方法
- python 随机生成字符串
- POJ 2253 Frogger 每条路径最大边然后选择这些最大边的最小的那个边 题解。。。根本翻译不出来
- javascript 详解document.write()方法
- 在Ubuntu中安装openssl
- hdu1698 Just a Hook--区间更新
- sublime text安装插件
- 利用iis虚拟目录实现文件服务器功能(分布式存储)