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,因為我們可以找到兩個可能的最佳解決方案

  • 用索引 0 處的元素替換索引 1 處的元素:[2,8,6] => [2,2,6],或者

  • 用索引 2 處的元素替換索引 1 處的元素:[2,8,6] => [2,6,6]。

它們都得到 |2-3| + (|2-4| 或 |6-4|) + |6-6| = 3 的差之和。

為了解決這個問題,我們將遵循以下步驟:

  • 如果 nums1 等於 nums2,則

    • 返回(0)

  • minn_diff := -無窮大

  • 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 模 (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

更新於: 2021年10月7日

357 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.