在Python中寻找最小绝对差之和的程序

在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]|

  • 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]|

  • summ := 0

  • for i in range 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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程