1. Recursive Minimum Jump Search
Intuition
Recursively explore every valid forward jump from the current index, returning 1 + minimum jumps across all choices.
Algorithm
- Step 1: If current index >= n - 1, return 0 (no further jumps needed).
- Step 2: Initialize minJumps = infinity.
- Step 3: Loop step from 1 to nums[i], recursing on i + step.
- Step 4: Update minJumps = min(minJumps, 1 + recursiveResult).
- Step 5: Return minJumps.
#include <iostream>#include <vector>#include <algorithm> using namespace std; class Solution { int solve(int idx, const vector<int>& nums) { if (idx >= (int)nums.size() - 1) return 0; int minJumps = 1e9; int furthest = min(idx + nums[idx], (int)nums.size() - 1); for (int next = idx + 1; next <= furthest; ++next) { minJumps = min(minJumps, 1 + solve(next, nums)); } return minJumps; }public: int jump(vector<int>& nums) { return solve(0, nums); }}; 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(2^N) - Space complexity:
O(N)