📌  相关文章
📜  检查给定的数字 K 是否足以到达数组的末尾(1)

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

检查给定的数字 K 是否足以到达数组的末尾

有一个数组,每个元素代表你可以向前移动的步数。一开始你在数组的第一个位置,问能否到达数组的最后一个位置。

例如,假设数组为 [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
复杂度分析
  • 时间复杂度:$O(n)$;
  • 空间复杂度:$O(1)$。