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
相关推荐
LeaderSheepH11 小时前
常见的排序算法
数据结构·算法·排序算法
青云交12 小时前
Java 大视界 -- Java 大数据在智能公交调度优化与准点率提升中的应用实践(416)
java·动态规划·flink cep·spark mllib·智能公交调度·杭州公交案例·准点率提升
周杰伦_Jay12 小时前
【图文详解】强化学习核心框架、数学基础、分类、应用场景
人工智能·科技·算法·机器学习·计算机视觉·分类·数据挖掘
violet-lz13 小时前
Linux静态库与共享库(动态库)全面详解:从创建到应用
算法
贝塔实验室13 小时前
ADMM 算法的基本概念
算法·数学建模·设计模式·矩阵·动态规划·软件构建·傅立叶分析
2351613 小时前
【LeetCode】3. 无重复字符的最长子串
java·后端·算法·leetcode·职场和发展
微笑尅乐13 小时前
神奇的位运算——力扣136.只出现一次的数字
java·算法·leetcode·职场和发展
自信的小螺丝钉14 小时前
Leetcode 155. 最小栈 辅助栈
leetcode·
吃着火锅x唱着歌14 小时前
LeetCode 3105.最长的严格递增或递减子数组
算法·leetcode·职场和发展
小卡皮巴拉14 小时前
【笔试强训】Day1
开发语言·数据结构·c++·算法