用 Python 编写程序,查找使列表元素相等的最小总成本

programmingpythonserver side programming

假设我们有两个数字列表,分别称为 nums 和 cost。现在考虑,有一个操作,我们可以增加或减少 nums[i] 的成本 cost[i]。我们可以执行任意数量的这些操作,并且我们希望使 nums 中的所有元素相等。我们必须找到所需的最小总成本。

因此,如果输入为 nums = [3, 2, 4] cost = [1, 10, 2],则输出将为 5,就好像我们可以将数字 3 减少为 2,成本为 1。然后我们可以将 4 减少两次,每次成本为 2。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义一个函数 helper() 。这将获取目标

  • total := 0

  • 对于 enumerate(nums) 中的每个 i,n,执行

    • 如果目标与 n 不同,则

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

  • 返回总计

  • 从主方法中,执行以下操作:

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

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

相关文章