文章链接:代码随想录
题目链接:力扣题目链接
图释:
class Solution {
public:
int maxProfit(vector<int>& prices) {
// 查看每天的收益情况,从每天都正向获利推到全局最优
int result = 0;
for(int i=1; i<prices.size(); i++){
result += max(prices[i]-prices[i-1], 0);
}
return result;
}
};
文章链接:代码随想录
视频链接:LeetCode:55.跳跃游戏
题目链接:力扣题目链接
图释:
class Solution {
public:
bool canJump(vector<int>& nums) {
// 不考虑跳多少格,只在覆盖范围内遍历,累加覆盖范围是否超过size
int cul = nums[0];
for(int i= 0; i<=cul; i++){
cul = max(i+nums[i], cul); // 取最大值更新覆盖范围
if(cul>=nums.size()-1) return true;
}
return false;
}
};
文章链接:代码随想录
视频链接:LeetCode:45.跳跃游戏||
题目链接:力扣题目链接
图释:
class Solution {
public:
int jump(vector<int>& nums) {
int result = 0; // 记录结果
int cul = 0; // 当前的覆盖范围
int next = 0; // 下一步的覆盖范围
for(int i=0; i<nums.size(); i++){
// 更新下一步的覆盖范围
next = max(i+nums[i], next); // 取最大值
if(i==cul){ //抵达当前覆盖位置的最大值
if(i!=nums.size()-1){ // 如果没到到达终点
result++; //开始走下一步
cul = next;
if(cul >= nums.size()-1) break; // 可加可不加,不加的话会多走点
}
else{ // 如果到达终点
break;
}
}
}
return result;
}
};