假设我们有一个塔高的列表和一个正值k。我们希望选择k个塔,并通过添加更多的砖块使它们都具有相同的高度,但要使用尽可能少的砖块。我们必须找到挑选k个塔并使它们具有相同高度所需的最少数量的砖。
因此,如果输入像heights = [4、7、31、14、40] k = 3,则输出将为17,因为我们可以选择5、8和15,这需要17块砖才能达到相同的高度。
为了解决这个问题,我们将遵循以下步骤-
排序列表高度
ans:=无限
s:= 0
对于每个索引i和值x的高度,执行
ans:= ans和(x * k-s)的最小值
s:= s-高度[i-k]
s:= s + x
如果i> = k,则
如果i> = k-1,则
返回ans
让我们看下面的实现以更好地理解-
class Solution: def solve(self, heights, k): heights.sort() ans = float("inf") s = 0 for i, x in enumerate(heights): s += x if i >= k: s -= heights[i - k] if i >= k - 1: ans = min(ans, x * k - s) return ans ob = Solution()heights = [5, 8, 32, 15, 41] k = 3 print(ob.solve(heights, k))
[5, 8, 32, 15, 41], 3
输出结果
17