Neetcode 150 - Jump Game 2

1. Input, Output, Contrains

  1. Input:
nums = [2,3,1,1,4]
  1. Output:
2
  1. Contrains:
  • 1 ≤ len(nums) ≤ 10⁵

  • 0 ≤ nums[i] ≤ 10⁵

2. Dry run

i	nums[i]	farthest = max(farthest, i + nums[i])	end	jumps	Action
0	2	2	2	1	reached end of jump window  +1 jump
1	3	4	2	1	still inside first jump window
2	1	4	2  update  2==end  end=farthest=4	2	another jump
3	1	4	4	2	inside second jump window
4	4	8	4	2	reached last index 

3. Naive Solution O(N^2)

class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        dp = [float('inf')] * n
        dp[0] = 0

        for i in range(n):
            for j in range(1, nums[i] + 1):
                if i + j < n:
                    dp[i + j] = min(dp[i + j], dp[i] + 1)
        return dp[-1]

⏱️ Complexity

  • Time: O(N^2)
  • Space: O(N)

4. Optimal Solution O(N)

class Solution:
    def jump(self, nums: List[int]) -> int:
        jumps = 0
        end = 0
        farthest = 0

        for i in range(len(nums) - 1):  # no need to jump from the last index
            farthest = max(farthest, i + nums[i])
            if i == end:  # we finish one jump
                jumps += 1
                end = farthest
        return jumps

⏱️ Complexity:

  • Time: O(N)
  • Space: O(1)
Last Updated On October 14, 2025