Counting Bits——Difficulty:Medium

来源:互联网 发布:java自学书籍推荐书目 编辑:程序博客网 时间:2024/06/01 07:12

Problem :

Given a non negative integer number num. For every numbers 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]. - 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.

**

Algorithm:

**
根据前面几个例子的观察:
0,1
10,11
101,100
110,111
……
可以看作前面两位+0或1,所以n中1的个数相当于就是(n/2中1的位数+1或0)。
比如101可以看作,10中1的个数+1,而101B/2正好是10。
所以,用F(n)表示n的二进制中1的个数,那么
F(n)=F(n/2)+n%2
同时我们已经知道了F(0),F(1),所以问题解决
**

Code:

**

class Solution {public:    vector<int> countBits(int num) {        vector<int> v(num+1,0);        for(int i=1;i<=num;i++)        {            v[i]=v[i/2]+i%2;        }        return v;    }};
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 锅的把手松了怎么办 奶锅把手松了怎么办 锅的手柄烧坏了怎么办 鞋子上的铆钉生锈了怎么办 包包上的铆钉生锈了怎么办 凉鞋的铆钉生锈了怎么办 扇子的铆钉坏了怎么办 包包的铆钉坏了怎么办 汽车半轴螺丝母拧不动怎么办? 卫衣袖子短了怎么办 u型导轨蚊帐下垂怎么办 100的水管螺纹出漏水怎么办 吊顶螺丝没有防锈处理怎么办 膨胀螺丝洞松了怎么办 膨胀螺丝眼大了怎么办 墙上螺丝孔大了怎么办 膨胀螺丝孔深了怎么办 克霉膨胀栓的线怎么办 摩托车排气管螺丝断了怎么办 汽车轮胎螺丝卸不下来怎么办 内六角螺丝卸不下来怎么办 洗衣机六角螺丝卸不动怎么办 黄油嘴打不进去怎么办 螺杆冷水机氟系统有空气怎么办 脚踏式加油枪皮碗不下去怎么办? 自攻螺丝滑丝怎么办? 大工打小工老板不管怎么办 虾缸的过滤吸虾怎么办 加热棒坏了鱼怎么办 钢材软打孔断钻头怎么办 空调余额下水管检查口按不上怎么办 风机盘管噪音大怎么办 混凝土水泥放少了怎么办 门式钢梁端板连接下料短啦怎么办? 灌桩导管堵了怎么办 公路车尾钩歪了怎么办 铃木羚羊车大灯不亮怎么办 玻璃瓶打碎了里面食物怎么办 玻璃门上轴坏了怎么办 配筋面积小了怎么办 ps大文件存不了怎么办