📅  最后修改于: 2023-12-03 15:22:44.662000             🧑  作者: Mango
本文介绍如何解决到达终点的最小跳数集合问题,采用O(n)解法。
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是到达数组的最后一个位置并返回最小的跳跃次数集合。
如果无法到达最后一个位置,则返回一个空集合。
我们可以定义 3 个变量:
我们从左到右遍历数组,每次都更新 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)。