🎉 One-stop destination for all your technical interview Preparation 🎉
Prerequisite frog jump.
What if K step can be jumped?
f(i-1)+abs(h[i]-h[i-1])
,
if(i>1)
:f(i-2)+abs(h[i]-h[i-2])
)f(i-1)+abs(h[i]-h[i-1])
,
if(i>1)
:f(i-2)+abs(h[i]-h[i-2])
,
if(i>2)
:f(i-3)+abs(h[i]-h[i-3])
,
if(i>3)
:f(i-4)+abs(h[i]-h[i-4])
,
.
.
.
if(i>k-1)
:f(i-k)+abs(h[i]-h[i-k])
)
where k is jump size.k=2
.// 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);
}
// 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);
}
// 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];
}
// 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];
}