Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm chênh lệch tổng tuyệt đối nhỏ nhất trong Python

Giả sử chúng ta có hai mảng có giá trị dương nums1 và nums2, có cùng kích thước. Hiệu tổng tuyệt đối của hai mảng này là tổng của | nums1 [i] - nums2 [i] | với mỗi 0 <=i

Vì vậy, nếu đầu vào giống như nums1 =[2,8,6], nums2 =[3,4,6], thì đầu ra sẽ là 3 vì, chúng ta có thể tìm thấy hai giải pháp tối ưu khả thi

  • Thay thế phần tử ở chỉ mục 1 bằng phần tử ở chỉ mục 0:[2,8,6] => [2,2,6] hoặc

  • Thay phần tử ở chỉ mục 1 bằng phần tử ở chỉ mục 2:[2,8,6] => [2,6,6].

Cả hai người đều nhận được tổng chênh lệch là | 2-3 | + (| 2-4 | hoặc | 6-4 |) + | 6-6 | =3.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu nums1 giống nums2 thì

    • trở lại (0)

  • minn_diff:=-infinity

  • ind:=-1

  • đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện

    • nếu | nums1 [i] -nums2 [i] |> minn_diff, sau đó

      • ind:=i

      • minn_diff:=| nums1 [i] - nums2 [i] |

  • diff:=| nums1 [ind] - nums2 [ind] |

  • index:=ind

  • đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện

    • nếu tôi không giống với ind, thì

      • nếu | nums1 [i] - nums2 [ind] |

        • chỉ mục:=i

        • diff:=| nums1 [i] -nums2 [ind] |

  • tổng:=0

  • đối với tôi trong phạm vi từ 0 đến kích thước của nums1 - 1, hãy thực hiện

    • nếu tôi giống với ind, thì

      • summ:=summ + | nums1 [index] - nums2 [i] |

    • nếu không,

      • sum:=summ + | nums1 [i] - nums2 [i] |

  • trả về bản mod tổng (10 ^ 9 + 7)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

[2,8,6], [3,4,6]

Đầu ra

3