用 Python 编写程序来查找最小绝对和差
假设我们有两个大小相同的正值数组 nums1 和 nums2。这两个数组的绝对和差是 |nums1[i] - nums2[i]| 的总和,其中 0 <= i < n(0 索引)。现在,我们可以用 nums1 中的任何其他元素替换 nums1 中的最多一个元素,以最小化绝对和差。我们必须在替换数组 nums1 中的最多一个元素后找到最小绝对和差。答案可能非常大,因此返回它对 10^9 + 7 取模的结果。
因此,如果输入为 nums1 = [2,8,6], nums2 = [3,4,6],则输出将为 3,因为我们可以找到两个可能的最佳解决方案
将索引 1 处的元素替换为索引 0 处的元素:[2,8,6] => [2,2,6],或
将索引 1 处的元素替换为索引 2 处的元素:[2,8,6] => [2,6,6]。
它们两者的总和差为 |2-3| + (|2-4| 或 |6-4|) + |6-6| = 3.
为了解决这个问题,我们将遵循以下步骤 −
如果 nums1 与 nums2 相同,则
return(0)
minn_diff := -infinity
ind := -1
对于 i 在 0 到 nums1 - 1 的大小范围内,执行
如果 |nums1[i]-nums2[i]| > minn_diff,然后
ind := i
minn_diff := |nums1[i] - nums2[i]|
diff := |nums1[ind] - nums2[ind]|
index := ind
对于 i 在 0 到 nums1 - 1 的大小范围内,执行
如果 i 与 ind 不同,则
如果 |nums1[i] - nums2[ind]| < diff,然后
index := i
diff := |nums1[i]-nums2[ind]|
summ := 0
对于 i 在 0 到 nums1 - 1 的大小范围内,执行
如果 i 与 ind 相同,则
summ := summ + |nums1[index] - nums2[i]|
否则,
summ := summ + |nums1[i] - nums2[i]|
返回 summ mod (10^9 + 7)
示例
让我们看看下面的实现以便更好地理解 −
def solve(nums1, nums2):
if(nums1==nums2):
return(0)
minn_diff = float('-inf')
ind = -1
for i in range(len(nums1)):
if(abs(nums1[i]-nums2[i]) > minn_diff):
ind = i
minn_diff = abs(nums1[i]-nums2[i])
diff = abs(nums1[ind]-nums2[ind])
index = ind
for i in range(len(nums1)):
if(i!=ind):
if(abs(nums1[i]-nums2[ind])<diff):
index = i
diff = abs(nums1[i]-nums2[ind])
summ = 0
for i in range(len(nums1)):
if(i==ind):
summ += abs(nums1[index]-nums2[i])
else:
summ += abs(nums1[i]-nums2[i])
return(summ%(10**9 + 7))
nums1 = [2,8,6]
nums2 = [3,4,6]
print(solve(nums1, nums2))
输入
[2,8,6], [3,4,6]
输出
3
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

