📅  最后修改于: 2023-12-03 15:22:35.364000             🧑  作者: Mango
给定两个长度相等的整数数组 arr1 和 arr2,求它们对应元素之差的绝对值的和的最小值。
即,求 $\sum\limits_{i=1}^{n} |arr1_i - arr2_i|$ 的最小值。
思路:
时间复杂度:$O(nlogn)$
实现:
def getMinAbsDiffSum(arr1: List[int], arr2: List[int]) -> int:
arr1.sort()
arr2.sort()
left, right = 0, len(arr2) - 1
res = 0
for num in arr1:
while left < len(arr2) - 1 and arr2[left] <= num:
left += 1
while right > 0 and arr2[right] >= num:
right -= 1
res += min(abs(num - arr2[left]), abs(num - arr2[right]))
return res
思路:
时间复杂度:$O(n^2)$
实现:
def getMinAbsDiffSum(arr1: List[int], arr2: List[int]) -> int:
m, n = len(arr1), len(arr2)
dp = [[0] * (n+1) for _ in range(m+1)]
for i in range(1, m+1):
dp[i][0] = dp[i-1][0] + abs(arr1[i-1] - arr2[0])
for j in range(1, n+1):
dp[0][j] = dp[0][j-1] + abs(arr1[0] - arr2[j-1])
for i in range(1, m+1):
for j in range(1, n+1):
dp[i][j] = min(dp[i-1][j] + abs(arr1[i-1] - arr2[j-1]),
dp[i][j-1] + abs(arr1[i-1] - arr2[j-1]),
dp[i-1][j-1] + abs(arr1[i-1] - arr2[j-1]))
return dp[-1][-1]
以上就是本题的两种解法,两种解法各有优缺点,需要根据具体情况选择合适的算法。