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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP