📅  最后修改于: 2023-12-03 15:40:36.462000             🧑  作者: Mango
有一个数组,每个元素代表你可以向前移动的步数。一开始你在数组的第一个位置,问能否到达数组的最后一个位置。
例如,假设数组为 [2, 3, 1, 1, 4],你在第一个位置,你需要判断能否到达最后一个位置。在这个例子中,你可以从第一个位置先向前移动 2 步,到达第二个位置;然后再向前移动 3 步,到达第五个位置,顺利到达最后一个位置,因此返回 True。
可以使用贪心算法来求解。
对于当前位置,我们需要判断当前位置与能够移动到的最远位置之间的所有位置,找到其中能够移动最远的位置,然后进行移动。如果到达了最后一个位置,则返回 True,否则返回 False。
def can_jump(nums):
"""
检查给定的数字 K 是否足以到达数组的末尾
param:
nums: List[int] -- 数组
return:
bool -- 是否能够到达最后一个位置
"""
if not nums:
return False
max_pos = 0 # 当前能够移动到的最远位置
length = len(nums)
for i in range(length):
# 如果当前位置已经超过了能够移动到的最远位置,则返回 False
if i > max_pos:
return False
# 更新能够移动到的最远位置
max_pos = max(max_pos, i+nums[i])
# 如果最远位置已经超过了数组的最后一个位置,则返回 True
if max_pos >= length-1:
return True
return False