Jump Game II
Problem Statement
You are given an array of integers nums
, where nums[i]
represents the maximum length of a jump towards the right from index i
. For example, if you are at nums[i]
, you can jump to any index i + j
where:
j <= nums[i]
i + j < nums.length
You are initially positioned at nums[0]
.
Return the minimum number of jumps to reach the last position in the array (index nums.length - 1
). You may assume there is always a valid answer.
Example 1:
Input: nums = [2,4,1,1,1,1]
Output: 2
Explanation: Jump from index 0
to index 1
, then jump from index 1
to the last index.
Example 2:
Input: nums = [2,1,2,1,0]
Output: 2
Constraints:
1 <= nums.length <= 1000
0 <= nums[i] <= 100
Recommended Time and Space Complexity
You should aim for a solution with O(n)
time and O(1)
space, where n
is the size of the input array.
Solution
Recursion
def jump(nums: list[int]) -> int: def dfs(i: int) -> int: if i == len(nums) - 1: return 0 if nums[i] == 0: return float('inf')
end = min(len(nums) - 1, i + nums[i]) res = float('inf') for j in range(i + 1, end + 1): res = min(res, 1 + dfs(j)) return res
return dfs(0)
Time complexity: O(n!)
Space complexity: O(n)
Dynamic Programming (Top-Down)
def jump(nums: list[int]) -> int: memo = {}
def dfs(i: int) -> int: if i in memo: return memo[i] if i == len(nums) - 1: return 0 if nums[i] == 0: return 1000000
res = 1000000 end = min(len(nums), i + nums[i] + 1) for j in range(i + 1, end): res = min(res, 1 + dfs(j)) memo[i] = res return res
return dfs(0)
Time complexity: O(n ^ 2)
Space complexity: O(n)
Dynamic Programming (Bottom-Up)
def jump(nums: list[int]) -> int: n = len(nums) dp = [1000000] * n dp[-1] = 0
for i in range(n - 2, -1, -1): end = min(n, i + nums[i] + 1) for j in range(i + 1, end): dp[i] = min(dp[i], 1 + dp[j]) return dp[0]
Time complexity: O(n ^ 2)
Space complexity: O(n)
Breadth First Search (Greedy)
def jump(nums: list[int]) -> int: res = 0 l = r = 0
while r < len(nums) - 1: farthest = 0 for i in range(l, r + 1): farthest = max(farthest, i + nums[i]) l = r + 1 r = farthest res += 1 return res
Time complexity: O(n)
Space complexity: O(1)