📌  相关文章
📜  检查是否可以通过重复跳转与前一跳转一样多、少或相同数量的索引来到达已排序数组的末尾(1)

📅  最后修改于: 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
复杂度分析
  • 时间复杂度:O(n),其中n为数组的长度。只需要遍历一次数组即可判断能否到达末尾。
  • 空间复杂度:O(1),只需要常数级别的额外空间。