JumpGame

Problem

https://leetcode.com/problems/jump-game/

You are given an integer array nums. You are initially positioned at the array’s first index, and each element in the array represents your maximum jump length at that position.

Return true if you can reach the last index, or false otherwise.

Example 1:

Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.

Example 2:

Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.

Constraints:

  • 1 <= nums.length <= 10:sup:`4`

  • 0 <= nums[i] <= 10:sup:`5`

Solution

The idea is to keep track of the furthest index that can be reached. If the furthest reachable index is less than the current index, then we cannot jump past the current index. At the end, if the furthest reachable index is equal to the last index, then we can reach the last index. At each step, update the furthest reachable index with the jump distance plus the current index if it is greater than the current furthest reachable index.

Pattern

Array, Dynamic Programming, Greedy

Code

from typing import List


def canJump(nums: List[int]) -> bool:
    """Whether it is possible to reach the last index given a list of jumps.
    """
    reachable = 0
    for i, num in enumerate(nums):
        if i <= reachable:
            reachable = max(reachable, i + num)
        else:
            return False

    return True

Test

>>> from JumpGame import canJump
>>> canJump([2, 3, 1, 1, 4])
True
>>> canJump([3, 2, 1, 0, 4])
False
JumpGame.canJump(nums: List[int]) bool

Whether it is possible to reach the last index given a list of jumps.