VOOZH about

URL: https://www.geeksforgeeks.org/dsa/minimum-time-to-reach-a-point-with-t-and-t-moves-at-time-t/

⇱ Minimum time to reach a point with +t and -t moves at time t - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Minimum time to reach a point with +t and -t moves at time t

Last Updated : 29 Nov, 2023

Given a positive coordinate 'X' and you are at coordinate '0', the task is to find the minimum time required to get to coordinate 'X' with the following move : 
At time 't', you can either stay at the same position or take a jump of length exactly 't' either to the left or to the right. In other words, you can be at coordinate 'x - t', 'x' or 'x + t' at time 't' where 'x' is the current position.
Examples:

Input: 6
Output: 3
At time 1, jump from x = 0 to x = 1 (x = x + 1)
At time 2, jump from x = 1 to x = 3 (x = x + 2)
At time 3, jump from x = 3 to x = 6 (x = x + 3)
So, minimum required time is 3.
Input: 9
Output: 4
At time 1, do not jump i.e x = 0
At time 2, jump from x = 0 to x = 2 (x = x + 2)
At time 3, jump from x = 2 to x = 5 (x = x + 3)
At time 4, jump from x = 5 to x = 9 (x = x + 4)
So, minimum required time is 4.

Approach: The following greedy strategy works: 
We just find the minimum 't' such that 1 + 2 + 3 + ... + t >= X. 

  • If (t * (t + 1)) / 2 = X then answer is 't'.
  • Else if (t * (t + 1)) / 2 > X, then we find (t * (t + 1)) / 2 – X and remove this number from the sequence [1, 2, 3, ..., t]. The resulting sequence sums up to 'X'.

Below is the implementation of the above approach: 


Output
The minimum time required is : 3

Time Complexity: O(n), since there is a while loop that runs for n times.
Auxiliary Space: O(1), since no extra space has been taken.

Approach#2: Using math

The problem can be solved using dynamic programming. We can start from the base case where n=0, and build the solution recursively by considering all possible jumps that can be taken at each step. We can use a memoization table to store the minimum time required to reach a point, so that we can avoid recomputing the same subproblems multiple times.

Algorithm

1. Create a memoization table dp of size n+1 and initialize all values to infinity.
2. Set dp[0] to 0.
For i from 1 to n, compute dp[i] as follows:
If i is a triangular number, set dp[i] to the square root of 2*i.
Otherwise, set dp[i] to dp[i-1] + 1.
For each jump size j from 1 to i, compute the time required to reach i-j*(j+1)/2 and add j to it.
If this time is less than dp[i], update dp[i] with this new minimum time.
3. Return dp[n].


Output
3

Time complexity: Computing the time required to reach a point takes O(1) time.
The outer loop runs for n iterations, and the inner loop runs for a maximum of sqrt(2*n) iterations.
Therefore, the time complexity of the algorithm is O(n*sqrt(n)).
Space complexity: We need an array of size n+1 to store the memoization table.
Therefore, the space complexity of the algorithm is O(n).

Comment
Article Tags: