📅  最后修改于: 2023-12-03 15:26:48.150000             🧑  作者: Mango
假设给定一个已经排序的数组nums,初始下标为0。现在你可以通过重复跳转nums[i]步骤来到达数组末尾。这个方法可以调用任意次数。如果你能到达数组末尾,则返回true;否则返回false。
由于数组是已经排序的,我们可以利用数组中相邻元素之间距离的关系,来判断能否到达末尾。
具体来说,我们从数组的末尾向前遍历,用一个变量step来记录当前需要跳的步数。
如果当前数组元素与前一个元素之间距离为step,则说明可以通过一步跳跃到达前一个元素。因此,我们将step重置为1。
如果当前数组元素与前一个元素之间距离大于step,则说明无法通过step步跳到前一个元素。我们返回false。
最后,如果我们遍历到了数组的第一个元素,且step不大于1,则说明可以通过跳跃到达数组的末尾,返回true。
def canJump(nums: List[int]) -> bool:
n = len(nums)
step = 1
for i in range(n - 2, -1, -1):
if nums[i] >= step:
step = 1
else:
step += 1
if i == 0 and step <= 1:
return True
return False