Algorithm
Minimum Total Distance Traveled
Solution
class Solution:
def minimumTotalDistance(self, robot: list[int], factory: list[list[int]]) -> int:
robot.sort()
factory.sort(key=lambda x: x[0])
factory_positions = []
for pos, limit in factory:
factory_positions.extend([pos] * limit)
robot_count = len(robot)
factory_count = len(factory_positions)
dp = [[None] * (factory_count + 1) for _ in range(robot_count + 1)]
def calculate_min_distance(robot_idx, factory_idx):
if dp[robot_idx][factory_idx] is not None:
return dp[robot_idx][factory_idx]
if robot_idx == robot_count:
return 0
if factory_idx == factory_count:
return float('inf')
# Option 1: Assign robot to this factory position
assign = abs(robot[robot_idx] - factory_positions[factory_idx]) + \
calculate_min_distance(robot_idx + 1, factory_idx + 1)
# Option 2: Skip this factory position for the current robot
skip = calculate_min_distance(robot_idx, factory_idx + 1)
dp[robot_idx][factory_idx] = min(assign, skip)
return dp[robot_idx][factory_idx]
return calculate_min_distance(0, 0)Video GuideLeetcode Daily
Time Complexity
O(n m)
Space Complexity
O(n m)
