用 Python 编写程序,找出建造 k 座相同高度塔所需的最少砖块数量

pythonserver side programmingprogramming

假设我们有一个塔高列表和一个正值 k。我们想选择 k 座塔,并通过添加更多砖块使它们都具有相同的高度,但使用的砖块尽可能少。我们必须找到选择 k 座塔并使它们高度相同的最少砖块数量。

因此,如果输入为 heights = [4, 7, 31, 14, 40] k = 3,则输出将为 17,因为我们可以选择 5、8 和 15,这需要 17 块砖才能达到相同的高度。

为了解决这个问题,我们将遵循以下步骤 −

  • 对高度列表进行排序
  • ans := infinity
  • s := 0
  • 对于高度中的每个索引 i 和值 x,执行
    • s := s + x
    • 如果 i >= k,则
      • s := s - heights[i - k]
    • 如果 i >= k - 1,则
      • ans := ans 和 (x * k - s) 的最小值
  • 返回 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

相关文章


有用资源