122 买卖股票的最佳时机||
题目链接:买卖股票的最佳时机||
思路
这道题目求的是获得的最大利润是多少。我们只需要收集正利润,便可求得最大利润。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0;
for(int i=1; i<prices.size(); i++){
int dif = prices[i] - prices[i-1];
if(dif > 0)
{
res += dif;
}
}
return res;
}
};
55 跳跃游戏
题目链接:跳跃游戏
思路
这道题目非常精巧。借用解析中的一张图,你品品,你仔细品品。
不管你走几步,你都走不过去。你没有一个下标所对应的数组可以到达末尾上。
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0;
if(nums.size() == 1) {
return true;
}
// i<=cover需要好好理解,cover代表了此时
// 能遍历的长度
for(int i=0; i<=cover; i++){
cover = max(i+nums[i],cover);
if(cover >= nums.size()-1){
return true;
}
}
return false;
}
};
45 跳跃游戏||
题目链接:跳跃游戏||
思路
上一道题目问的是能不能跳过去,这一道题目问的是最少跳几次就可以跳到末尾元素上。有点过于困难,参考解析代码。
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size() == 1) {
return 0;
}
int curDistance = 0; // 当前可以走的最远距离
int ans = 0; // 走的步数
int nextDistance = 0; // 下一步可以走的最远距离
for(int i=0; i<nums.size(); i++){
nextDistance = max(nums[i]+i, nextDistance);
if(i==curDistance) { // 如果走到了当前步的最远距离
ans++;
curDistance = nextDistance;
if(nextDistance >= nums.size()-1){
break;
}
}
}
return ans;
}
};
参考链接
- https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html#%E6%80%9D%E8%B7%AF