假设我们有两个数字列表,分别称为nums和cost。现在考虑,存在一个可以增加或减少成本[i]的nums [i]的操作。我们可以执行任意数量的这些操作,并且希望使所有元素在num中相等。我们必须找到所需的最低总成本。
因此,如果输入像nums = [3,2,4] cost = [1,10,2],那么输出将是5,就好像我们可以将1的成本将3减少为2一样。我们可以减少4次两次,每次费用为2。
为了解决这个问题,我们将遵循以下步骤-
定义一个功能helper()。这将成为目标
总计:= 0
对于inumerate(nums)中的每个i,n,执行
总数:=总数+ | n-target | *费用[i]
如果目标与n不同,则
总回报
在主要方法中,执行以下操作:
低:= 0,高:=最大值
当低<高不为零时,
低:=中+ 1
高:=中
中:=(低+高)/ 2
如果helper(mid)<helper(mid + 1),则
除此以外,
返回助手(低)
让我们看下面的实现以更好地理解-
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