1033. Moving Stones Until Consecutive LeetCode Solution

In this guide, you will get 1033. Moving Stones Until Consecutive LeetCode Solution with the best time and space complexity. The solution to Moving Stones Until Consecutive problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.

Table of Contents

  1. Problem Statement
  2. Complexity Analysis
  3. Moving Stones Until Consecutive solution in C++
  4. Moving Stones Until Consecutive solution in Java
  5. Moving Stones Until Consecutive solution in Python
  6. Additional Resources
1033. Moving Stones Until Consecutive LeetCode Solution image

Problem Statement of Moving Stones Until Consecutive

There are three stones in different positions on the X-axis. You are given three integers a, b, and c, the positions of the stones.
In one move, you pick up a stone at an endpoint (i.e., either the lowest or highest position stone), and move it to an unoccupied position between those endpoints. Formally, let’s say the stones are currently at positions x, y, and z with x < y < z. You pick up the stone at either position x or position z, and move that stone to an integer position k, with x < k < z and k != y.
The game ends when you cannot make any more moves (i.e., the stones are in three consecutive positions).
Return an integer array answer of length 2 where:

answer[0] is the minimum number of moves you can play, and
answer[1] is the maximum number of moves you can play.

Example 1:

Input: a = 1, b = 2, c = 5
Output: [1,2]
Explanation: Move the stone from 5 to 3, or move the stone from 5 to 4 to 3.

Example 2:

Input: a = 4, b = 3, c = 2
Output: [0,0]
Explanation: We cannot make any moves.

Example 3:

Input: a = 3, b = 5, c = 1
Output: [1,2]
Explanation: Move the stone from 1 to 4; or move the stone from 1 to 2 to 4.

Constraints:

1 <= a, b, c <= 100
a, b, and c have different values.

Complexity Analysis

  • Time Complexity: O(\texttt{sort})
  • Space Complexity: O(\texttt{sort})

1033. Moving Stones Until Consecutive LeetCode Solution in C++

class Solution {
 public:
  vector<int> numMovesStones(int a, int b, int c) {
    vector<int> nums = {a, b, c};

    ranges::sort(nums);

    if (nums[2] - nums[0] == 2)
      return {0, 0};
    return {min(nums[1] - nums[0], nums[2] - nums[1]) <= 2 ? 1 : 2,
            nums[2] - nums[0] - 2};
  }
};
/* code provided by PROGIEZ */

1033. Moving Stones Until Consecutive LeetCode Solution in Java

class Solution {
  public int[] numMovesStones(int a, int b, int c) {
    int[] nums = new int[] {a, b, c};

    Arrays.sort(nums);

    if (nums[2] - nums[0] == 2)
      return new int[] {0, 0};
    return new int[] {Math.min(nums[1] - nums[0], nums[2] - nums[1]) <= 2 ? 1 : 2,
                      nums[2] - nums[0] - 2};
  }
}
// code provided by PROGIEZ

1033. Moving Stones Until Consecutive LeetCode Solution in Python

class Solution:
  def numMovesStones(self, a: int, b: int, c: int) -> list[int]:
    nums = sorted([a, b, c])

    if nums[2] - nums[0] == 2:
      return [0, 0]
    return [1 if min(nums[1] - nums[0], nums[2] - nums[1]) <= 2 else 2,
            nums[2] - nums[0] - 2]
# code by PROGIEZ

Additional Resources

Happy Coding! Keep following PROGIEZ for more updates and solutions.