[LeetCode] Counting Bits 计算二进制表示法中1的位数
来源:互联网 发布:郑爽 不吃饭知乎 编辑:程序博客网 时间:2024/09/21 08:44
声明:原题目转载自LeetCode,解答部分为原创
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]
.
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.
Solution :
思路:最直接的想法是,遍历二进制表示数中的每一位,用一个count来记录 “1” 的位数,时间复杂度为O( n * sizeof(n) ),其中sizeof(n)表示n的二进制表示法的位数。更进一步,我们很容易发现,由于在考虑 n 的 “1”位数时,0 ~ n - 1的 “1”位数是已知的,所以自然而然地找寻 n 的 “1”位数与小于n的 “1”位数之间的联系。如二进制顺序数组 { 00, 01,10,11,100,101,110,111, ......},以 “110” 为例,可将其拆分成“1” 和 ”10”,故其“1”位数相当于 1 + “10”的 “1”位数。“10” 的 “1”位数已知,则 “110”的 “1”位数可以在常数时间内求出。
代码如下:
#include<iostream>#include<vector>using namespace std;class Solution {public: vector<int> countBits(int num) { vector<int> bits_1; if(num == 0) { bits_1.push_back(0); return bits_1; } if(num == 1) { bits_1.push_back(0); bits_1.push_back(1); return bits_1; } bits_1.push_back(0); bits_1.push_back(1); int initial_size = 2; int point = 0; for(int i = 2; i <= num ; i ++) { bits_1.push_back(bits_1[point] + 1); point = (point + 1) % initial_size; if(point == 0) initial_size *= 2; } return bits_1; }};int main(){Solution text;vector<int> array;array = text.countBits(7);for(int i = 0 ; i < array.size() ; i ++){cout << array[i] << " ";}cout << endl;return 0;}
0 0
- [LeetCode] Counting Bits 计算二进制表示法中1的位数
- 338. Counting Bits(计算整数二进制表示中1的位数)
- LeetCode 338. Counting Bits(计算二进制数中1的位数)
- (LeetCode)Counting Bits -- 求二进制中1的个数
- leetcode-338. Counting Bits 统计十进制数字的二进制表示中1的个数,列表的定义,奇偶判断
- leetcode 338. Counting Bits 位计算 + 统计二进制1的数量
- 巧妙计算一个数二进制表示法中1的位数
- Counting Bits 计算二进制形式中的1的个数
- leetcode 338. Counting Bits(C语言,二进制中1的个数)39
- LeetCode:Counting Bits(高效计算n内所有数的置位数)
- 338. Counting Bits 数字的二进制中1的个数
- 计算二进制中1的位数
- LeetCode中338Counting Bits的题解
- 191. Number of 1 Bits (计算一个整数的二进制表示中有多少个1)
- LeetCode 461. Hamming Distance (计算二进制数中1的位数)
- LeetCode 231. Power of Two (算法,计算二进制数中1的位数)
- 计算二进制‘1’位数
- 对于一个字节(8bits)的变量,求其二进制表示中“1”的个数
- 搞定Android开发圆形头像
- Buy the souvenirs(方案数+01背包)
- python 3.x 不再支持MySQLdb 模块
- 最少拦截系统
- 2017阿里后台开发工程师面试经验分享之一面
- [LeetCode] Counting Bits 计算二进制表示法中1的位数
- 我的java学习路之I/O流学习应用查找文件
- 使用python链接wamp或者xamp中的数据库
- 66. Plus One
- Android Studio 的SDK Manager
- python语法小知识
- Sublime Text 3 快捷键
- BootStrap学习笔记(二):关于分页组件中<a>标签disable后还是可以点击的问题
- Balanced Binary Tree