Python程式:查詢最大截斷日誌大小以將其完全儲存在資料庫中


假設我們有一個名為logs的數字列表和另一個值limit。logs[i]中的每個元素代表第i個使用者生成的日誌大小。limit代表我們可以在資料庫中儲存的日誌總大小。我們必須找到最大的x,這樣如果我們將logs中的每個日誌截斷到最多x大小,並且剩餘日誌大小的總和最多為limit。如果不需要截斷任何日誌,則直接返回最大的日誌大小。

因此,如果輸入類似於logs = [500, 200, 10000, 500, 4000] limit = 3000,則輸出將為900,因為我們將日誌截斷到900,然後我們可以得到[500, 200, 900, 500, 900],現在的總和是3000。

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

  • lo := 0
  • hi := logs最大值 + 1
  • 當 lo + 1 < hi 時,執行:
    • mi := lo + floor((hi - lo)/2)
    • 如果logs列表中所有元素(每個日誌取mi和日誌本身的最小值)的總和 <= limit,則:
      • lo := mi
    • 否則:
      • hi := mi
  • 返回 lo

示例

讓我們看下面的實現來更好地理解:

def solve(logs, limit):
   lo, hi = 0, max(logs) + 1
   while lo + 1 < hi:
      mi = lo + (hi - lo) // 2
      if sum(min(mi, log) for log in logs) <= limit:
         lo = mi
      else:
         hi = mi
   return lo

logs = [500, 200, 10000, 500, 4000]
limit = 3000
print(solve(logs, limit))

輸入

[500, 200, 10000, 500, 4000], 3000

輸出

900

更新於:2021年10月19日

97 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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