[Leetcode] 338. Counting Bits 解题报告
来源:互联网 发布:java多文件上传插件 编辑:程序博客网 时间:2024/05/19 11:44
题目:
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.
思路:
我们经过分析就可以发现,一个数的1的个数和它的一半之间存在对应关系(可以想象一下位操作中的右移操作^_^),具体来讲:
1)如果n是偶数,那么它的二进制所含的1的个数和它的一半相同;
2)如果n是奇数,那么它的二进制所含的1的个数比它的一半对一个。
因此,一个十分简洁的状态转移方程出来了:dp[i] = dp[i / 2] + i % 2。代码的时间复杂度是O(n),空间复杂度是O(1)(我们这里没有计算返回值所占用的空间)。
代码:
class Solution {public: vector<int> countBits(int num) { vector<int> dp(num + 1, 0); for (int i = 1; i <= num; ++i) { dp[i] = dp[i / 2] + i % 2; } return dp; }};
阅读全文
0 0
- [leetcode] 338. Counting Bits 解题报告
- LeetCode 338.Counting Bits 解题报告
- LeetCode解题报告 338. Counting Bits [medium]
- leetcode解题报告:338. Counting Bits
- [Leetcode] 338. Counting Bits 解题报告
- 【LeetCode】Counting Bits 解题报告
- Counting Bits解题报告
- LeetCode---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
- CentOS安装solr 4.10.3
- 集成电路中的测试概述(一)
- HttpClientUtil 封装方法
- Centos7下搭载邮件服务器
- to
- [Leetcode] 338. Counting Bits 解题报告
- [SDUT](3361) 数据结构实验之图论四:迷宫探索 ---DFS(图)
- Android Studio频繁假死解决方法记录
- 生产者和消费者的经典问题 java编程实现
- ios-依赖系统语言的应该程序名字的国际化
- 图论--2017暑期第四周专题
- js 倒计时
- js实现加载更多的功能
- leetcode--Valid Palindrome