Python程式:查詢構建k個相同高度塔樓所需的最小磚塊數


假設我們有一列塔的高度,以及一個正值k。我們想要選擇k個塔,透過新增更多的磚塊使它們的高度相同,但要儘可能少地使用磚塊。我們必須找到使k個塔的高度相同所需的最小磚塊數。

因此,如果輸入類似於heights = [4, 7, 31, 14, 40] k = 3,則輸出將為17,因為我們可以選擇5、8和15,這需要17塊磚來使高度相同。

為了解決這個問題,我們將遵循以下步驟:

  • 對列表heights進行排序
  • ans := 無窮大
  • s := 0
  • 對於每個索引i和heights中的值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

更新於:2020年11月19日

427 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.