Leetcode 题目整合01
来源:互联网 发布:tensorflow教程 pdf 编辑:程序博客网 时间:2024/05/17 03:20
写在前面:
最近一直在做一些LeetCode的题目,我之前一直是将每道题我的答案和想法以及别人优秀的答案都整合在一起然后上传的GitHub上,但是我发现这样做自己还是很难去经常复习,尤其最近发现很多之前遇到的问题再次发生。所以很有必要对一些阶段性的问题进行归纳和总结。
今天遇到的是这样的题目:
题目非常的简单,就是要求输入整数的对应二进制序列的1的个数,要求o(n)的时间复杂度和o(n)的空间复杂度。
废话不多说我的答案如下:
class Solution {public: vector<int> countBits(int num) { vector<int> ans; for(int i=0;i<=num;i++) { int count = 0; int j = i; while(j) { count += j%2; j = j >> 1;//问题 } ans.push_back(count); } return ans; }};
问题出在注释的那一行,这是不知道第几次出现>>移位操作符的时候我想当然把这个当做是对j操作,其实不是他是返回了一个临时的变量,而原本的j并没有改变,所以必须要将这个值赋值回给j。
更好的方案:
class Solution {public: vector<int> countBits(int num) { vector<int> ret(num+1, 0); for (int i = 1; i <= num; ++i) ret[i] = ret[i&(i-1)] + 1; return ret; }};
我认为这个做法是类似一位动态规划。
划分其实很简单,将前面的结果缓存起来,用于后面的求解。
关键在于这个式子的理解:ret[i] = ret[i&(i-1)] + 1;
i&(i-1) 是i和i-1对应二进制序列中相同部分的二进制序列,记这个序列中1的位数为a,那么i中一的位数必然等于a+1。
阅读全文
0 0
- Leetcode 题目整合01
- leetcode题目
- LeetCode 题目
- < 题目 > LeetCode
- 动态规划题目整合
- 动态规划题目整合
- 动态规划题目整合
- 线段树题目整合
- 字典树题目整合
- KMP题目整合
- 线段树题目整合
- LeetCode题目 Insert Interval
- 【转载】【leetcode】题目分布
- Leetcode 题目分类
- leetcode题目解答---- SortList
- leetcode题目:LRU Cache
- leetcode题目:Reorder List
- leetcode题目:Candy
- Android自定义View实现搜索动画效果
- Maven配置过滤
- 34岁!100天!学会Java编程(Day29-Day38)—Web后端编程
- 使用GET请求资源时一个隐蔽的问题
- 3
- Leetcode 题目整合01
- 常用list,map操作之java8
- oracle--索引,视图,同义词
- 3
- OpenCL入门一
- Dubbox 环境搭建
- 笔记本电脑清除BIOS密码
- 最小生成树 贪心算法思想
- GIS二次开发-多个shp文件的加载(两种方法)