Watch 10 video solutions for Minimum Total Distance Traveled, a hard level problem involving Array, Dynamic Programming, Sorting. This walkthrough by Techdose has 7,166 views views. Want to try solving it yourself? Practice on FleetCode or read the detailed text solution.
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
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 <= 100factory[j].length == 2-109 <= robot[i], positionj <= 1090 <= limitj <= robot.lengthProblem Overview: You are given positions of robots and factories on a number line. Each factory can repair a limited number of robots. The goal is to assign every robot to a factory so the total travel distance is minimized while respecting factory capacities.
The key observation: robots and factories lie on a 1D line. After sorting both lists, optimal assignments never cross. A robot to the left will never be assigned to a factory far right if a closer one exists that still has capacity. Sorting simplifies the problem structure and enables dynamic programming.
Approach 1: Greedy Assignment with Capacity Tracking (≈ O((n + m) log m) time, O(m) space)
Start by sorting the robot positions and factories by location using sorting. Process robots from left to right and always try assigning them to the closest factory that still has capacity. A min-heap or ordered structure can track candidate factories and remaining capacity. Each assignment reduces that factory's capacity and contributes abs(robot - factory) to the total distance.
This approach works well when the closest available factory is typically optimal. It relies on the 1D structure of the problem and capacity tracking. However, greedy choices can become tricky when several factories compete for future robots, which is why many interviewers prefer the DP formulation.
Approach 2: Dynamic Programming with Sorted Positions (O(n * m) time, O(n * m) space)
The robust solution models assignments explicitly. First sort robots and factories using array ordering. Let dp[i][j] represent the minimum distance needed to repair the first i robots using the first j factories. For each factory, try repairing k robots (from 0 up to its capacity) and accumulate the distance between those robots and the factory position.
The transition checks all valid k values and updates dp[i][j] from dp[i-k][j-1]. Distances are added incrementally to avoid recomputation. Because robots and factories are sorted, assignments remain ordered and crossing never occurs. This turns a seemingly exponential assignment problem into a structured dynamic programming table.
The DP approach guarantees the optimal assignment and is the most reliable way to handle tight capacity distributions or edge cases where greedy choices fail.
Recommended for interviews: The dynamic programming approach is the expected solution for a hard problem. It demonstrates control over state definition, transitions, and ordered assignments after sorting. Mentioning the greedy intuition first shows you understand the structure, but implementing the DP proves you can reason about optimal substructure and constraints.
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Greedy with Capacity Tracking | O((n + m) log m) | O(m) | When factories are processed dynamically and nearest assignment usually works |
| Dynamic Programming on Sorted Robots and Factories | O(n * m) | O(n * m) | General optimal solution when capacities and positions create complex assignment choices |