假设我们有一个塔高的列表和一个正值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