Leetcode45:跳跃游戏 II

题目描述:

给定一个长度为 n0 索引 整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

代码思路:

  1. 初始化变量
    • num_c:记录跳跃次数,初始化为0。
    • position:记录当前需要到达的目标位置,初始化为数组的最后一个索引(len(nums) - 1),因为目标是到达数组的最后一个位置。
  2. 循环直到到达起始位置
    • 使用一个while循环,条件是position > 0,意味着只要还没到达数组的第一个位置(索引0),就继续循环。
  3. 寻找能够到达当前目标位置的最远起始点
    • 在每次循环中,使用一个for循环遍历从0到position(包括position)的所有位置。
    • 对于每个位置i,检查从i出发能否跳跃到或超过当前的目标位置position(即i + nums[i] >= position)。
    • 如果可以,增加跳跃次数num_c,并将position更新为当前的起始点i,然后跳出内层循环。
  4. 返回结果
    • 循环结束后,返回跳跃次数num_c

代码实现:

复制代码
class Solution:
    def jump(self, nums: List[int]) -> int:
        num_c = 0
        position = len(nums) - 1
        while position > 0:
            for i in range(position + 1):
                if i + nums[i] >= position:
                    num_c += 1
                    position = i
                    break
        return num_c
相关推荐
AI软著研究员4 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish4 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱5 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者21 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮21 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法