LeetCode-338. Counting Bits (Java)
来源:互联网 发布:淘宝推广佣金 编辑:程序博客网 时间:2024/06/08 00:29
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]
.
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.
题意
给定一个数num,然后对于每一个i(0<=i<=num),计算它包含1的数量。
思路
最简单的思路就是循环,然后对于i做与运算(&),然后再做移位运算,知道i==0为止。
代码
public static int[] countBits(int num) {int [] result = new int[num+1]; for(int i=0;i<=num;i++){ int value = i; int count =0; while(value !=0){ if((value & 1) == 1){ ++count; } value = value >>1; } result[i] = count; } return result; }但是题目中要求时间复杂度为O(n),上面的代码不符合要求。然后参考别人的代码,学习到一种机智的方法:
public static int[] countBits(int num){int[] f = new int[num + 1]; for (int i=1; i<=num; i++) f[i] = f[i >> 1] + (i & 1); return f;}
至于为什么这样做可以,背后的逻辑其实不是很懂。另外需要主要:
i>>1相当于i/2
i&1相当于i%2
阅读全文
0 0
- leetcode-java-338. Counting Bits
- LeetCode-338. Counting Bits (Java)
- [leetcode] 338. Counting Bits
- leetcode 338. Counting Bits
- [LeetCode]338. Counting Bits
- LeetCode#338. Counting Bits
- [LeetCode] 338. Counting Bits
- LeetCode 338. Counting Bits
- [LeetCode]338. Counting Bits
- LeetCode-338. Counting Bits
- LeetCode *** 338. Counting Bits
- (leetcode) 338. Counting Bits
- #leetcode#338. Counting Bits
- LeetCode 338. Counting Bits
- leetcode 338. Counting Bits
- LeetCode-338. Counting Bits
- LeetCode-338. Counting Bits
- leetcode-338. Counting Bits
- 指导思想 博客名称、头像、个人主页简述
- 仅两个变量实现值的交换
- 用最简单的方法枚举法求最大公约数
- openresty-加强版的nginx
- 逆反的01串 oj105
- LeetCode-338. Counting Bits (Java)
- C++中的引用
- swift4.0 UITableView纯代码实现
- hanoi塔经典递归算法
- jQuery源码阅读(十三)---jQuery异步队列模块
- 【USACO1.5.3】特殊的质数肋骨
- 简单Servlet+jsp 例子的逻辑思维分析
- Splay树模板
- Jam的计数法 oj106