在Python中寻找最小绝对差之和的程序
假设我们有两个正数数组nums1和nums2,大小相同。这两个数组的绝对差和是每个0 <= i < n(0索引)的|nums1[i] – nums2[i]|之和。现在,我们可以将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相同,则
- 返回(0)
- minn_diff := -无穷大
-
ind := -1
-
for i in range 0 到 nums1大小 – 1,执行
- 如果|nums1[i]-nums2[i]| > minn_diff,则
- ind := i
-
minn_diff := |nums1[i] – nums2[i]|
- 如果|nums1[i]-nums2[i]| > minn_diff,则
-
diff := |nums1[ind] – nums2[ind]|
-
index := ind
-
for i in range 0 到 nums1大小 – 1,执行
- 如果i与ind不同,则
- 如果|nums1[i] – nums2[ind]| <diff,则
-
index := i
-
diff := |nums1[i]-nums2[ind]|
- 如果|nums1[i] – nums2[ind]| <diff,则
- 如果i与ind不同,则
-
summ := 0
-
for i in range 0 到 nums1大小 – 1,执行
- 如果i与ind相同,则
- summ := summ + |nums1[index] – nums2[i]|
- 否则,
- summ := summ + |nums1[i] – nums2[i]|
- 如果i与ind相同,则
- 返回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