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

示例

让我们看看以下实现以获得更好的理解 -

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中找到最小绝对和差的程序 的全部内容, 来源链接: utcz.com/z/361644.html

回到顶部