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

目录

122.买卖股票的最佳时机

思路

代码

55.跳跃游戏

思路

代码

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

思路

代码


122.买卖股票的最佳时机

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

代码随想录

思路

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

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

假如第 0 天买入,第 3 天卖出,那么利润为:prices3 - prices0

相当于(prices3 - prices2) + (prices2 - prices1) + (prices1 - prices0)。

此时就是把利润分解为每天为单位的维度,而不是从 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,那第一步能跳的地方自然就是nums0,如果第一步能跳的范围里跳不到终点,就遍历第一步能跳的范围,来扩大全局能跳的范围,如果不行,就遍历第二步能跳的范围, 继续扩大全局能跳的范围。

代码
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
相关推荐
GreenTea6 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20026 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
土司大王7 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹7 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
颜颜yan_7 小时前
ESP-IDF 鸿蒙 PC 适配全记录:打通 Python、构建工具链与 ESP32-P4 固件生成
python·华为·harmonyos
言乐67 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
土司大王7 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
weixin_440730507 小时前
线程02-并发串行-互斥锁-Semaphore-Event
python·thread
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质