122.买卖股票的最佳时机II
本题解法很巧妙,大家可以看题思考一下,在看题解。
题目讲解 | 题目链接
cpp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int result = 0;
for (int i = 1; i < prices.size(); i++) {
// 直接看两天之间的差值,将所有为正的加和
int prifit = prices[i] - prices[i - 1];
if (prifit > 0) {
result += prifit;
}
}
return result;
}
};
55. 跳跃游戏
本题如果没接触过,很难想到,所以不要自己憋时间太久,读题思考一会,没思路立刻看题解
题目讲解 | 题目链接
好难,自己根本想不到,暂时先看得懂思路和代码
cpp
class Solution {
public:
bool canJump(vector<int>& nums) {
// 当前阶梯能跳跃的覆盖范围
int cover = 0;
// 如果是1阶,那肯定能到达
if (nums.size() == 1) return true;
for (int i = 0; i <= cover; i++) {
// 取能覆盖的最远范围
cover = max(i + nums[i], cover);
// 如果能达到最后一阶
if (cover >= nums.size() - 1)
return true;
}
return false;
}
};+
45.跳跃游戏II
本题同样不容易想出来。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是不容易想到。
https://programmercarl.com/0045.跳跃游戏II.html
好难,自己根本想不到,暂时先看得懂思路和代码
cpp
class Solution {
public:
int jump(vector<int>& nums) {
if (nums.size() < 2) return 0;
int result = 0;
// 当前跳跃范围的结束位置
int currentEnd = 0;
// 能跳跃到的最远位置
int farthest = 0;
for (int i = 0; i < nums.size() - 1; i++) {
farthest = max(farthest, i + nums[i]);
// 到达当前跳跃范围的结束位置时
if (i == currentEnd) {
result++;
currentEnd = farthest;
// 如果当前跳跃范围已经覆盖了最后一个位置
if (currentEnd >= nums.size() - 1)
break;
}
}
return result;
}
};