1. Recursive Exhaustive Search
Intuition
From index i, recursively try all jump lengths from 1 to nums[i] and take the minimum.
Algorithm
- Define
solve(i). - If
i >= n - 1, return 0. - If
nums[i] == 0, return \infty. - Try every step
sfrom 1 tonums[i]: -
minJumps = min(minJumps, 1 + solve(i + s)). - Return
minJumps.
#include <iostream>#include <vector>#include <algorithm> using namespace std; class Solution { int solve(int i, const vector<int>& nums) { if (i >= nums.size() - 1) return 0; if (nums[i] == 0) return 1e9; int minJumps = 1e9; for (int step = 1; step <= nums[i]; ++step) { minJumps = min(minJumps, 1 + solve(i + step, nums)); } return minJumps; }public: int jump(vector<int>& nums) { int ans = solve(0, nums); return ans >= 1e9 ? -1 : ans; }}; int main() { Solution sol; vector<int> nums = {2, 3, 1, 1, 4}; cout << "Min Jumps: " << sol.jump(nums) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(k^n) where k is average jump - Space complexity:
O(n) call stack