📌  相关文章
📜  到达终点的最小跳数集合2(O(n)解)(1)

📅  最后修改于: 2023-12-03 15:22:44.662000             🧑  作者: Mango

到达终点的最小跳数集合2(O(n)解)
概述

本文介绍如何解决到达终点的最小跳数集合问题,采用O(n)解法。

问题描述

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是到达数组的最后一个位置并返回最小的跳跃次数集合。

如果无法到达最后一个位置,则返回一个空集合。

解法

我们可以定义 3 个变量:

  • i:记录当前跳跃次数所能到达的最远位置。
  • end:记录下一次跳跃能到达的最远位置。
  • step:记录跳跃的次数。

我们从左到右遍历数组,每次都更新 i 和 end 的值,如果 i 到达了 end,则需要增加跳跃次数。

代码实现
def jump(nums):
    """
    :type nums: List[int]
    :rtype: List[int]
    """
    n = len(nums)
    i = 0
    end = 0
    step = 0
    res = []
    while i < n - 1:
        farthest = 0
        for j in range(i, end + 1):
            if j + nums[j] > farthest:
                farthest = j + nums[j]
        res.append(farthest)
        i = end + 1
        end = farthest
        step += 1
    return res
时间复杂度

由于只遍历了一次数组,所以时间复杂度是O(n)。

空间复杂度

只需要几个变量的辅助空间,空间复杂度是O(1)。