Neetcode 150 - Jump Game 2
1. Input, Output, Contrains
- Input:
nums = [2,3,1,1,4]
- Output:
2
- 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