Python程式:計算K小時內移除石頭的速率
假設我們有一個名為piles的數字列表和一個值k。piles[i]表示第i堆石頭數量。每小時,我們選擇任何一堆石頭並移除r塊石頭。如果我們選擇的一堆石頭少於r塊,仍然需要一小時才能清除該堆石頭。我們必須找到r的最小值,以便我們能夠在k小時或更短的時間內移除所有石頭。
因此,如果輸入類似於piles = [3, 6, 4] k = 5,則輸出將為3,因為對於每小時移除3塊石頭(r = 3),我們可以用2小時清除第二堆,用2小時清除第三堆,用1小時清除第一堆。
為了解決這個問題,我們將遵循以下步驟:
- l := 1
- h := piles中的最大值
- r := h
- 定義一個函式turns()。這將需要r
- 返回列表中所有元素的總和,其中(每個b在piles中,向上取整 b / r)
- 在主方法中,執行以下操作:
- 當l < h時,執行
- mid := floor((l + h) / 2)
- 如果turns(mid) > k,則
- l := mid + 1
- 否則,
- h := mid
- r := min(r, mid)
- 返回r
示例
讓我們看看下面的實現以更好地理解:
from math import ceil def solve(piles, k): l = 1 h = max(piles) r = h def turns(r): return sum(ceil(b / r) for b in piles) while l < h: mid = (l + h) // 2 if turns(mid) > k: l = mid + 1 else: h = mid r = min(r, mid) return r piles = [3, 6, 4] k = 5 print(solve(piles, k))
輸入
[3, 6, 4], 5
輸出
3
廣告