Python程式:查詢使列表元素相等所需的最小總成本


假設我們有兩個數字列表,分別稱為 nums 和 costs。現在考慮,有一個操作可以將 nums[i] 增加或減少,成本為 costs[i]。我們可以執行任意數量的此類操作,並且我們希望使 nums 中的所有元素都相等。我們必須找到所需的最小總成本。

因此,如果輸入類似於 nums = [3, 2, 4] costs = [1, 10, 2],則輸出將為 5,因為我們可以將數字 3 減少到 2,成本為 1。然後我們可以將 4 遞減兩次,每次成本為 2。

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

  • 定義一個函式 helper()。這將接收目標值。

  • total := 0

  • 對於每個 i,n 在 enumerate(nums) 中,執行以下操作:

    • 如果目標與 n 不相同,則

      • total := total + |n-target| * costs[i]

  • 返回 total

  • 從主方法中執行以下操作:

  • low := 0,high := nums 的最大值

  • 當 low < high 不為零時,執行以下操作:

    • mid := (low + high) / 2

    • 如果 helper(mid) < helper(mid+1),則

      • high := mid

    • 否則,

      • low := mid + 1

  • 返回 helper(low)

讓我們看看以下實現以更好地理解:

示例

 即時演示

class Solution:
   def solve(self, nums, costs):
      def helper(target):
         total = 0
         for i,n in enumerate(nums):
            if target != n:
               total += abs(n-target) * costs[i]
         return total
      low,high = 0, max(nums)
      while low < high:
         mid = low + high >> 1
         if helper(mid) < helper (mid+1):
            high = mid
         else:
            low = mid + 1
      return helper(low)
ob = Solution()
nums = [3, 2, 4]
costs = [1, 10, 2]
print(ob.solve(nums, costs))

輸入

[3, 2, 4], [1, 10, 2]

輸出

5

更新於: 2020-10-07

224 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.