【Leetcode】Counting Bits
2016-05-27 23:45
369 查看
题目链接:https://leetcode.com/problems/counting-bits/
题目:
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
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.
思路:
c[i] :数字i的二进制有多少个1 状态转移方程:
c[i]=c[i>>1]+i&1
比如数字7的二进制111只需要计算最后一位和前两位中1的个数,而前两位的个数和110的个数是一样的,也和11是一样的。
算法:
public int[] countBits(int num) {
int res[] = new int[num+1];
for(int i=0;i<=num;i++){
res[i] = res[i>>1]+(i&1);
}
return res;
}
题目:
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 = 5you 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.
思路:
c[i] :数字i的二进制有多少个1 状态转移方程:
c[i]=c[i>>1]+i&1
比如数字7的二进制111只需要计算最后一位和前两位中1的个数,而前两位的个数和110的个数是一样的,也和11是一样的。
算法:
public int[] countBits(int num) {
int res[] = new int[num+1];
for(int i=0;i<=num;i++){
res[i] = res[i>>1]+(i&1);
}
return res;
}
相关文章推荐
- Android点击除EditText外地方隐藏软键
- 麦肯锡七步成诗法学习笔记简记以及案例分析(附参考资料可下载)
- VAO,VBO绘图方式及GLSL传值
- Java基础回顾 : 正则表达式
- EntityFramework codefirst
- DevExpress官方汉化文件对界面进行汉化的过程
- java 强引用,软引用,弱引用,虚引用
- iOS对象序列化和反序列化
- xml schema约束入门(1)
- Android 通过注册广播,实时监听网络连接与断开状态的变化
- 公众号微信支付开发
- 有钱没钱
- hdu-2680-Choose the best route
- C++ 马克思手稿问题(暴力循环)
- NoHttp,volley,okhttp介绍
- string 类(刚做的一道题目,用到了string的排序)
- bzoj2839 集合计数
- 1012. 数字分类 (20)
- Java Stream初探(二)
- 对数组a中n个整数反序存放,可用指针实现。