代码随想录算法训练营第二十八天|leetcode45、55、122题

本文介绍了LeetCode中的三道题目,涉及股票买卖中的最大利润计算,数组跳跃问题(包括普通跳跃和最小跳跃次数),通过示例代码展示了如何在Python中解决这些问题。

一、leetcode第122题

本题通过计算两天之间的价格差可以确定买卖股票是否赔钱,因此将价格差数组中为正的元素都加起来则是买卖股票所赚的最大利润。

具体代码如下:

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

二、leetcode第55题

本题要求是否能从数组的起始位置跳跃到最后一个位置,这需要通过跳跃的覆盖范围来判断,也就是在起始的覆盖范围内不断更新新的最大覆盖范围,如果覆盖范围超过数组长度则返回true,如果遍历完整个数组都无法超过数组长度则返回false。

具体代码如下:

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

三、leetcode第45题

本题与上题的不同在于要求最小跳跃次数,在解题过程中要加入对下一步的最大跳跃范围的求解,如果当前跳跃最大范围没有到达数组末尾,则更新为下一步最大跳跃范围并对跳跃步数进行加一操作,如果超过了数组的大小则返回结果。

具体代码如下:

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值