博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 338. Counting Bits
阅读量:4913 次
发布时间:2019-06-11

本文共 1262 字,大约阅读时间需要 4 分钟。

338. 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 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
  • class Solution {public:    vector
    countBits(int num) { vector
    count_v(num+1,0); for(int i = 1; i <= num;i++) { int x = i; int count=0; while(x) { if((x & 1)==1) count++; x >>= 1; } count_v[i] = count; } return count_v; }};

    注意:1.计算二进制中1的个数,难点在于时间复杂度。有三种基本求二进制1个数的方法:

  • (1)定理求解:取余数的方法,最慢。
  • (2)基本法(雾):值和1进行&操作,然后>>算术右移,仍然有两个循环。(即为本道题我的解法)
  • (3)快速法:n和n-1进行&操作,可以消去二进制最右的1,仍然有两个循环。(在191题中的解法)
  • 参考:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html

转载于:https://www.cnblogs.com/dystopia/p/5312252.html

你可能感兴趣的文章
phpmyadmin 的安装配置
查看>>
需求流分析2.0
查看>>
random随机数
查看>>
凸包模板——Graham扫描法
查看>>
api无限拓展的想像世界
查看>>
hdu 2215 Maple trees
查看>>
【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体
查看>>
一套Tomcat处理多个域名请求 - Virtual Host
查看>>
[ubuntu] 外挂硬盘
查看>>
CommonJS是如何提高javascript的生产力的
查看>>
在 Windows 上安装 Hadoop 教程(转)
查看>>
PHP数组函数(4)
查看>>
js获取一个对象的所以属性和值
查看>>
XML解析之SAX详解
查看>>
leetcode 338. Counting Bits
查看>>
NUMBER类型细讲
查看>>
koa2-3
查看>>
MySQL慢查询日志总结
查看>>
ipad常见错误
查看>>
时钟效果
查看>>