在Python中查找使k个塔具有相同高度所需的最小砖块数的程序
假设我们有一个塔高度列表和一个正值k。我们想选择k个塔并通过添加更多的砖块使它们高度相同,但使用尽可能少的砖块。我们必须找出选择k个塔并使它们高度相同所需的最小砖块数。
因此,如果输入为heights = [4、7、31、14、40]和k = 3,则输出将为17,因为我们可以选择5、8和15,需要17个砖块使它们具有相同的高度。
为了解决这个问题,我们将执行以下步骤 –
- 对高度列表进行排序
- ans := 无穷大
- s := 0
- 对于heights中的每个索引i和值x,执行以下操作 –
- s := s + x
- 如果i> = k,则
- s = s – heights[i – k]
- 如果i> = k – 1,则
- ans := ans和(x * k – s)的最小值
- 返回ans
让我们看看以下实现,以获得更好的理解 –
更多Python相关文章,请阅读:Python 教程
示例
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