Problem
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 arrayanswer
of length2
where :
answer[0]
is the minimum number of moves you can play, andanswer[1]
is the maximum number of moves you can play.
Examples
Example 1
|
|
Example 2
|
|
Example 3
|
|
Constraints
1 <= a, b, c <= 100
a
,b
, andc
have different values.
Solution
Method 1 -
Intuition
Sort the positions. The minimum moves depend on the gaps: if the stones are already consecutive, 0 moves; if one gap is 1 or 2, only 1 move; otherwise, 2 moves. The maximum moves is the sum of the gaps minus 2.
Approach
Sort a, b, c to get x < y < z. Compute left_gap = y - x, right_gap = z - y. If both gaps are 1, return [0,0]. If either gap is 2, min moves is 1. Otherwise, min moves is 2. Max moves is left_gap - 1 + right_gap - 1.
Code
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(1)
(sorting 3 numbers is constant time). - 🧺 Space complexity:
O(1)
.