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

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.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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:

## C++

 `// C++ implementation of the above approach ` ` `  `#include ` ` `  `using` `namespace` `std; ` ` `  `   ``// returns the minimum time ` `    ``// required to reach 'X' ` `    ``long` `cal_minimum_time(``long` `X) ` `    ``{ ` ` `  `        ``// Stores the minimum time ` `        ``long` `t = 0; ` `        ``long` `sum = 0; ` ` `  `        ``while` `(sum < X) { ` ` `  `            ``// increment 't' by 1 ` `            ``t++; ` ` `  `            ``// update the sum ` `            ``sum = sum + t; ` `        ``} ` ` `  `        ``return` `t; ` `    ``} ` ` `  `// Driver code ` `int` `main() ` `{ ` `        ``long` `n = 6; ` `        ``long` `ans = cal_minimum_time(n); ` `        ``cout << ``"The minimum time required is : "` `<< ans ; ` ` `  `   ``return` `0; ` `    `  `   ``// This code is contributed by ANKITRAI1 ` `} `

## Java

 `// Java implementation of the above approach ` `class` `GFG { ` ` `  `    ``// returns the minimum time ` `    ``// required to reach 'X' ` `    ``static` `long` `cal_minimum_time(``long` `X) ` `    ``{ ` ` `  `        ``// Stores the minimum time ` `        ``long` `t = ``0``; ` `        ``long` `sum = ``0``; ` ` `  `        ``while` `(sum < X) { ` ` `  `            ``// increment 't' by 1 ` `            ``t++; ` ` `  `            ``// update the sum ` `            ``sum = sum + t; ` `        ``} ` ` `  `        ``return` `t; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``long` `n = ``6``; ` `        ``long` `ans = cal_minimum_time(n); ` `        ``System.out.println(``"The minimum time required is : "` `+ ans); ` `    ``} ` `} `

## Python3

 `# Python 3 implementation of the  ` `# above approach ` ` `  `# returns the minimum time ` `# required to reach 'X' ` `def` `cal_minimum_time(X): ` ` `  `    ``# Stores the minimum time ` `    ``t ``=` `0` `    ``sum` `=` `0` ` `  `    ``while` `(``sum` `< X): ` `         `  `        ``# increment 't' by 1 ` `        ``t ``=` `t ``+` `1` `         `  `        ``# update the sum ` `        ``sum` `=` `sum` `+` `t; ` `     `  `    ``return` `t; ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``n ``=` `6` `    ``ans ``=` `cal_minimum_time(n) ` `    ``print``(``"The minimum time required is :"``, ans)  ` `     `  `# This code is contributed By ` `# Surendra_Gangwar `

## C#

 `// C#  implementation of the above approach ` `using` `System; ` ` `  `public` `class` `GFG{ ` `     `  `    ``// returns the minimum time  ` `    ``// required to reach 'X'  ` `    ``static` `long` `cal_minimum_time(``long` `X)  ` `    ``{  ` ` `  `        ``// Stores the minimum time  ` `        ``long` `t = 0;  ` `        ``long` `sum = 0;  ` ` `  `        ``while` `(sum < X) {  ` ` `  `            ``// increment 't' by 1  ` `            ``t++;  ` ` `  `            ``// update the sum  ` `            ``sum = sum + t;  ` `        ``}  ` ` `  `        ``return` `t;  ` `    ``}  ` ` `  `    ``// Driver code ` `    ``static` `public` `void` `Main (){ ` `        ``long` `n = 6;  ` `        ``long` `ans = cal_minimum_time(n);  ` `        ``Console.WriteLine(``"The minimum time required is : "` `+ ans);  ` `    ``}  ` `}  `

## PHP

 ` `

Output:

```The minimum time required is : 3
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.