精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。
目录
题单介绍:
题目:338. 比特位计数 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过过过过啦!!!!
题目:198. 打家劫舍 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过过过过啦!!!!
编辑一些话
写在最后:
class Solution {
public:
vector countBits(int n) {
}
};
这道题并不难,
他就是求一下每位二进制1的数量,
然后返回就行,
遍历一遍,然后设计一个求1的数量的方法即可,
代码如下:
class Solution {
public:
vector countBits(int n) {
vector ans;
for(int i = 0; i <= n; i++) {
int res = get(i);
ans.push_back(res);
}
return ans;
}
private:
int get(int n) {
int sum = 0;
while(n) {
sum += n & 1;
n >>= 1;
}
return sum;
}
};
class Solution {
public:
int rob(vector& nums) {
}
};
打家劫舍是一道非常经典的动态规划入门题目,
能非常好的体现动态规划的思想,
这是想学习动态规划必刷的一道题目,
具体思路如下:
状态转移方程是这样的:
如何决定要不要偷这一家人,
max(偷上一家的累计金额,上两家的累计金额 + 当前这一家的金额)
就能求出当前位置偷取金额的最大值,或者说最优解,
代码如下:
class Solution {
public:
int rob(vector& nums) {
if(nums.size() == 0) return 0;
if(nums.size() == 1) return nums[0];
vector v(nums.size() + 1);
v[0] = nums[0];
v[1] = max(nums[0], nums[1]);
for(int i = 2; i < nums.size(); i++) {
v[i] = max(v[i - 1], v[i - 2] + nums[i]);
}
return v[nums.size() - 1];
}
};
暑假了,我的LeetCode hot100现在刷了有84题了,
再往下刷的收益没有那么大了,
所以我打算开始新的刷题专题,专门花这个暑假来刷一刷动态规划的题目,
而题单的话,我打算去刷剑指Offer的专项突击版本了。
如果之后还有机会,我会把hot100的题目全部刷完。
那么后会有期。
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~