代码随想录训练营24day-贪心算法2

文章探讨了如何在股票买卖中找到最佳时机以实现利润最大化,以及解决跳跃游戏中的最小步骤问题,涉及数组遍历、动态规划和覆盖范围的计算。

一、122 买卖股票最佳时机

题目介绍限制条件,必须卖了再买,而且当前交易一只股票。一开始想法是去遍历,找到每个区间段间的差值,然后再相加。看了解答,其实每一天的利润,都是可以用差值表示出来,每一天的利润最大,那么累加起来,总利润也是最大的。再思考怎么能最大化,只要每天的是正利润,那么就是递增的。

int maxProfit(int* prices, int pricesSize) {
    //可以计算每天的利润
    int result = 0;
    for(int i = 1; i < pricesSize; i++)
    {
        int diff = prices[i] - prices[i - 1];
        //每一天的正利润相加
        if(diff >= 0)
        {
            result += diff;
        }
    }
    return  result;
}

二、55 跳跃游戏

题目意思是从下标index=0(第一个位置),跳跃数组上指定范围内的步数,能不能跳跃到最后一步。

每一步所在的数组值都是一个跳跃范围,代表了在此时,这个点能够达到的最大范围。再跳跃到最大范围的点上,找到此位置上的值,来确认范围是否覆盖。

每一次遍历数组,找到num[i] + i是不是最大值,每一次都更新最大值,判断最大值是不是到达边界。

bool canJump(int* nums, int numsSize) {
    int pos = 0;
    if(numsSize == 1)
    {
        return true;
    }
    //注意这里是<= pos
    for(int i = 0; i <= pos; i++)
    {
        pos = pos > i + nums[i] ? pos : i + nums[i];
        //p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值