LeetCode 338 Counting Bits(位运算)
来源:互联网 发布:bluestacks mac 热 编辑:程序博客网 时间:2024/04/29 18:05
题意:用O(n)的复杂度求出[0, n]内所有数的1的数量。
思路:假设每个数的二进制表示中有num[i]个1,现在有一个数k,k-1二进制表示中最右有p个连续的1,现在将k-1加一,那么这连续的p个1会变成0,而且第p+1位会变成1,也就是说我们得到了一个递推式,num[i] = num[i-1] + 1 - p。
现在的问题就是求p,可以用unordered_map存储一个映射,二进制表示为p个连续的1数的十进制映射到p,这个预处理一下即可。
class Solution {public: vector<int> countBits(int num) { unordered_map<int, int> um; vector<int> ans; for (int i = 1, j = 0; i < (1<<30); i<<=1) um[i-1] = j++; ans.push_back(0); for (int i = 1; i <= num; i++) { int ones = (i^(i-1)) >> 1; ans.push_back(ans[i-1]+1-um[ones]); } return ans; }};
1 0
- LeetCode 338 Counting Bits(位运算)
- Leetcode 338 - Counting Bits(dp + 位运算)
- leetcode 338 : Counting Bits :找规律&位运算
- LeetCode338. Counting Bits(位运算+DP)
- 位操作-leetcode 338 Counting Bits
- 338. Counting Bits--位运算
- [LeetCode] Counting Bits 计数位
- leetcode:bits:Counting Bits(338)
- 【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
- Counting Bits leetcode 338
- [LeetCode 338] Counting Bits
- LeetCode-338:Counting Bits
- HashMap的工作原理
- 数据挖掘领域十大经典算法
- mysql 整理
- Eclipse上GIT插件EGIT使用手册
- XAudio2学习之IXAudio2VoiceCallback回调
- LeetCode 338 Counting Bits(位运算)
- mybatis如何防止sql注入
- R语言学习路线和常用数据挖掘包
- Android图像处理总结
- MySQL之binlog_row_image参数
- String.intern、new String()、以及String =""总结:
- linux下vi命令大全
- eclispe中的maven项目使用spring报错
- C++中的文件流