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: 2Explanation: 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: 2Constraints:
1 <= nums.length <= 10000 <= 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 resTime complexity: O(n) Space complexity: O(1)