2463. Minimum Total Distance Traveled LeetCode Solution
In this guide, you will get 2463. Minimum Total Distance Traveled LeetCode Solution with the best time and space complexity. The solution to Minimum Total Distance Traveled 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
- Problem Statement
- Complexity Analysis
- Minimum Total Distance Traveled solution in C++
- Minimum Total Distance Traveled solution in Java
- Minimum Total Distance Traveled solution in Python
- Additional Resources

Problem Statement of Minimum Total Distance Traveled
There are some robots and factories on the X-axis. You are given an integer array robot where robot[i] is the position of the ith robot. You are also given a 2D integer array factory where factory[j] = [positionj, limitj] indicates that positionj is the position of the jth factory and that the jth factory can repair at most limitj robots.
The positions of each robot are unique. The positions of each factory are also unique. Note that a robot can be in the same position as a factory initially.
All the robots are initially broken; they keep moving in one direction. The direction could be the negative or the positive direction of the X-axis. When a robot reaches a factory that did not reach its limit, the factory repairs the robot, and it stops moving.
At any moment, you can set the initial direction of moving for some robot. Your target is to minimize the total distance traveled by all the robots.
Return the minimum total distance traveled by all the robots. The test cases are generated such that all the robots can be repaired.
Note that
All robots move at the same speed.
If two robots move in the same direction, they will never collide.
If two robots move in opposite directions and they meet at some point, they do not collide. They cross each other.
If a robot passes by a factory that reached its limits, it crosses it as if it does not exist.
If the robot moved from a position x to a position y, the distance it moved is |y – x|.
Example 1:
Input: robot = [0,4,6], factory = [[2,2],[6,2]]
Output: 4
Explanation: As shown in the figure:
– The first robot at position 0 moves in the positive direction. It will be repaired at the first factory.
– The second robot at position 4 moves in the negative direction. It will be repaired at the first factory.
– The third robot at position 6 will be repaired at the second factory. It does not need to move.
The limit of the first factory is 2, and it fixed 2 robots.
The limit of the second factory is 2, and it fixed 1 robot.
The total distance is |2 – 0| + |2 – 4| + |6 – 6| = 4. It can be shown that we cannot achieve a better total distance than 4.
Example 2:
Input: robot = [1,-1], factory = [[-2,1],[2,1]]
Output: 2
Explanation: As shown in the figure:
– The first robot at position 1 moves in the positive direction. It will be repaired at the second factory.
– The second robot at position -1 moves in the negative direction. It will be repaired at the first factory.
The limit of the first factory is 1, and it fixed 1 robot.
The limit of the second factory is 1, and it fixed 1 robot.
The total distance is |2 – 1| + |(-2) – (-1)| = 2. It can be shown that we cannot achieve a better total distance than 2.
Constraints:
1 <= robot.length, factory.length <= 100
factory[j].length == 2
-109 <= robot[i], positionj <= 109
0 <= limitj <= robot.length
The input will be generated such that it is always possible to repair every robot.
Complexity Analysis
- Time Complexity: O(|\texttt{robot}|^2|\texttt{factory}|)
- Space Complexity: O(|\texttt{robot}|^2|\texttt{factory}|)
2463. Minimum Total Distance Traveled LeetCode Solution in C++
class Solution {
public:
long long minimumTotalDistance(vector<int>& robot,
vector<vector<int>>& factory) {
ranges::sort(robot);
ranges::sort(factory);
vector<vector<vector<long>>> mem(
robot.size(),
vector<vector<long>>(factory.size(), vector<long>(robot.size())));
return minimumTotalDistance(robot, factory, 0, 0, 0, mem);
}
private:
// Returns the minimum distance to fix robot[i..n) with factory[j..n), where
// factory[j] already fixed k robots.
long minimumTotalDistance(const vector<int>& robot,
const vector<vector<int>>& factory, int i, int j,
int k, vector<vector<vector<long>>>& mem) {
if (i == robot.size())
return 0;
if (j == factory.size())
return LONG_MAX;
if (mem[i][j][k] > 0)
return mem[i][j][k];
const long skipFactory =
minimumTotalDistance(robot, factory, i, j + 1, 0, mem);
const int position = factory[j][0];
const int limit = factory[j][1];
const long useFactory =
limit > k ? minimumTotalDistance(robot, factory, i + 1, j, k + 1, mem) +
abs(robot[i] - position)
: LONG_MAX / 2;
return mem[i][j][k] = min(skipFactory, useFactory);
}
};
/* code provided by PROGIEZ */
2463. Minimum Total Distance Traveled LeetCode Solution in Java
class Solution {
public long minimumTotalDistance(List<Integer> robot, int[][] factory) {
Collections.sort(robot);
Arrays.sort(factory, (a, b) -> Integer.compare(a[0], b[0]));
long[][][] mem = new long[robot.size()][factory.length][robot.size()];
return minimumTotalDistance(robot, factory, 0, 0, 0, mem);
}
private long minimumTotalDistance(List<Integer> robot, int[][] factory, int i, int j, int k,
long[][][] mem) {
if (i == robot.size())
return 0;
if (j == factory.length)
return Long.MAX_VALUE;
if (mem[i][j][k] > 0)
return mem[i][j][k];
final long skipFactory = minimumTotalDistance(robot, factory, i, j + 1, 0, mem);
final int position = factory[j][0];
final int limit = factory[j][1];
final long useFactory = limit > k ? minimumTotalDistance(robot, factory, i + 1, j, k + 1, mem) +
Math.abs(robot.get(i) - position)
: Long.MAX_VALUE / 2;
return mem[i][j][k] = Math.min(skipFactory, useFactory);
}
}
// code provided by PROGIEZ
2463. Minimum Total Distance Traveled LeetCode Solution in Python
class Solution:
def minimumTotalDistance(
self,
robot: list[int],
factory: list[list[int]],
) -> int:
robot.sort()
factory.sort()
@functools.lru_cache(None)
def dp(i: int, j: int, k: int) -> int:
"""
Returns the minimum distance to fix robot[i..n) with factory[j..n), where
factory[j] already fixed k robots.
"""
if i == len(robot):
return 0
if j == len(factory):
return math.inf
skipFactory = dp(i, j + 1, 0)
position, limit = factory[j]
useFactory = (dp(i + 1, j, k + 1) + abs(robot[i] - position)
if limit > k else math.inf)
return min(skipFactory, useFactory)
return dp(0, 0, 0)
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.