用 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