代码随想录算法训练营第三十五天 | 122.买卖股票的最佳时机 II、55.跳跃游戏、45.跳跃游戏 II

目录

122.买卖股票的最佳时机

思路

代码

55.跳跃游戏

思路

代码

[45.跳跃问题 II](#45.跳跃问题 II)

思路

代码


122.买卖股票的最佳时机

本题解法很巧妙,大家可以看题思考一下,在看题解。

代码随想录

思路

贪心这种东西,毫无章法可言, 完全就是如果想不到,想破脑袋都想不到,如果有思路,刷刷就写出来,感觉完全就是看你的刷题量,和你脑瓜子灵不灵光。

像这道题,(其实买卖股票的最佳时机有很多到衍生题,在力扣上可以看到),如果想到其实最终利润是可以分解的,那么本题就很容易了!

假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。

此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!

我只能说,好家伙。。。(每日崩溃1/1)

代码
python 复制代码
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        result = 0
        for i in range(1, len(prices)):
            result += max(prices[i] - prices[i - 1], 0)
        return result

55.跳跃游戏

本题如果没接触过,很难想到,所以不要自己憋时间太久,读题思考一会,没思路立刻看题解

代码随想录

思路

看到没,连Carl哥都说了,没接触过根本想不到,这东西完全看你见过的题多不多。操千曲而后晓声,观千剑而后识器。

其实跳几步无所谓,关键在于可跳的覆盖范围!

不一定非要明确一次究竟跳几步,每次取最大跳跃步数,这个就是可以跳跃的覆盖范围。

这个范围内,别管是怎么跳的,反正一定可以跳过来。

那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!

代码
python 复制代码
class Solution:
    def canJump(self, nums: List[int]) -> bool:
        cover = 0
        if len(nums) == 1: return True
        i = 0
        # python不支持动态修改for循环中变量,使用while循环代替
        while i <= cover:
            cover = max(i + nums[i], cover)
            if cover >= len(nums) - 1: return True
            i += 1
        return False

45.跳跃问题 II

本题同样不容易想出来。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是不容易想到。

代码随想录

思路

从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数!

如果给的数组长度为1,直接return 0 ,如果不为1,那第一步能跳的地方自然就是nums[0],如果第一步能跳的范围里跳不到终点,就遍历第一步能跳的范围,来扩大全局能跳的范围,如果不行,就遍历第二步能跳的范围, 继续扩大全局能跳的范围。

代码
python 复制代码
from typing import List


class Solution:
    def jump(self, nums: List[int]):
        max_cover = nums[0]
        i = 0
        step = 1
        if len(nums) == 1:
            return 0

        while max_cover < len(nums) - 1:
            step += 1
            cover = max_cover
            for i in range(i + 1, cover + 1):
                max_cover = max(max_cover, i + nums[i])

        return step
相关推荐
银河邮差20 分钟前
python实战-用海外代理IP抓LinkedIn热门岗位数据
后端·python
闻缺陷则喜何志丹42 分钟前
【SOSDP模板 容斥原理 逆向思考】3757. 有效子序列的数量|分数未知
c++·算法·力扣·容斥原理·sosdp·逆向思考
CoovallyAIHub1 小时前
如何在手机上轻松识别多种鸟类?我们发现了更简单的秘密……
深度学习·算法·计算机视觉
别动哪条鱼1 小时前
AVAudioFifo
数据结构·ffmpeg·音视频
第二只羽毛1 小时前
遵守robots协议的友好爬虫
大数据·爬虫·python·算法·网络爬虫
好难取啊1 小时前
[python学习]案例01:随机验证码与账号密码修改
python
秋邱1 小时前
价值升维!公益赋能 + 绿色技术 + 终身学习,构建可持续教育 AI 生态
网络·数据库·人工智能·redis·python·学习·docker
艾斯比的日常1 小时前
Java 三色标记算法:并发垃圾回收的核心技术解析
java·开发语言·算法
2501_941144421 小时前
Python + C++ 异构微服务设计与优化
c++·python·微服务
CoovallyAIHub1 小时前
抛弃LLM!MIT用纯视觉方法破解ARC难题,性能接近人类水平
深度学习·算法·计算机视觉