【代码随想录算法训练Day32】LeetCode 122 买卖股票的最佳时机 II、LeetCode 55.跳跃游戏、LeetCode 45.跳跃游戏II

Day32 贪心第二天

LeetCode 122 买卖股票的最佳时机 II

思路真是无比巧妙,把区间利润拆成每天的利润,其实就是算出每天的利润,然后只取其中的正值即可。

在代码中计算是否计算加时还与0取最大值,相当于大于0才加入。

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res=0;
        for(int i=1;i<prices.size();i++)
            res+=max(prices[i]-prices[i-1],0);
        return res;
    }
};

LeetCode 55.跳跃游戏

本题的关键在于不再纠结我们如何跳,而是一直考虑最远能跳到哪里,也就是跳跃的覆盖范围,如果覆盖范围大于等于最后一个元素的下标,那就是能跳到,否则就跳不到了。

cpp 复制代码
class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover=0;
        if(nums.size()==1) return true;
        for(int i=0;i<=cover;i++){
            cover=max(cover,i+nums[i]);
            if(cover>=nums.size()-1)
                return true;
        }
        return false;
    }
};

LeetCode 45.跳跃游戏II

本题的关键在于每次跳跃时都取能让跳跃覆盖范围变得更大的下一跳,而且我们也不用考虑应该怎么跳,只需要增加每一步能扩展的最大范围即可,只要范围比大于等于末尾元素的下标,那就成功了。

cpp 复制代码
class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size()==1) return 0;
        int cur=0,next=0,res=0;
        for(int i=0;i<nums.size();i++){
            next=max(next,nums[i]+i);
            if(i==cur){
                if(cur!=nums.size()-1){
                    res++;
                    cur=next;
                    if(cur>=nums.size()-1)
                        break;
                }
                else break;
            }
        }
        return res;
    }
};

接下来是思维的考验了。

相关推荐
Jerry10 小时前
LeetCode 28. 找出字符串中第一个匹配项的下标
算法
Jerry12 小时前
LeetCode 459. 重复的子字符串
算法
海石15 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石15 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry17 小时前
LeetCode 151. 反转字符串中的单词
算法
a11177619 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜19 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry19 小时前
LeetCode 541. 反转字符串 II
算法
Jerry20 小时前
LeetCode 344. 反转字符串
算法
搞科研的小刘选手20 小时前
【香港大学主办&IEEE出版】第六届计算机视觉、应用与算法国际学术会议(CVAA 2026)
算法·计算机视觉·应用·学术会议