Complete-Preparation

🎉 One-stop destination for all your technical interview Preparation 🎉

View the Project on GitHub

Frog Jump follow up

Prerequisite frog jump.

What if K step can be jumped?

Solution Explanation


Recursive Solution

Code

// TESTED OK but TLE
int helper(int n, vector<int>& heights, int k, int i)
{
    if (i == 0) return 0;

    int res = INT_MAX;
    for(int jump=1;jump<=k;jump++)
    {
        if(i>jump-1)
        {
            res = min(res,helper(n, heights, k, i - jump) + abs(heights[i - jump] - heights[i]));
        }
    }

    return res;
}

int frogJump(int n, vector<int>& heights)
{
    int k = 2;
    return helper(n, heights, k, n - 1);
}

Memoized Solution (Top-Down)

Code

// TESTED OK AC
int helper(int n, vector<int>& heights, vector<int>& memo, int k, int i)
{
    if (i == 0)
        return 0;

    if (memo[i] != -1) return memo[i];

    int res = INT_MAX;
    for (int jump = 1; jump <= k; jump++)
    {
        if (i > jump - 1)
        {
            res = min(res, helper(n, heights, memo, k, i - jump)
            + abs(heights[i - jump] - heights[i]));
        }
    }

    return memo[i] = res;
}

int frogJump(int n, vector<int>& heights)
{
    int k = 2;
    vector<int> memo(n + 1, -1);
    return helper(n, heights, memo, k, n - 1);
}

Tabulation Solution (Bottom-Up)

Code-1

// TESTED OK AC
int frogJump(int n, vector<int>& heights)
{
    int k = 2;
    vector<int> dp(n, 0);
    dp[0] = 0;
    for (int i = 1; i < n; i++) {
        int maxJump = INT_MAX;
        for(int jump=1;jump<=k;jump++){
            if(i>jump-1)
            {
                int currJump = dp[i-jump] + abs(heights[i-jump] - heights[i]);
                maxJump = min(currJump, maxJump);
            }
        }
        dp[i] = maxJump;
    }
    return dp[n - 1];
}

Code-2

// TESTED OK AC
int frogJump(int n, vector<int>& heights)
{
    int k = 2;
    vector<int> dp(n, 0);
    dp[0] = 0;
    for (int i = 1; i < n; i++) {
        dp[i] = INT_MAX;
        for (int jump = 1; jump <= k; jump++) {
            if (i > jump - 1)
            {
                int currJump = dp[i - jump] + abs(heights[i - jump] - heights[i]);
                dp[i] = min(dp[i], currJump);
            }
        }
    }
    return dp[n - 1];
}

Space optimized Tabulation Solution (Bottom-Up)