在Python中查找K小时内的石头删除率程序
假设我们有一个数字列表叫做堆,以及一个值k。piles [i]表示PILE i上的石头数量。每小时,我们选择任何一堆,从该堆中删除r个石头。如果我们选择一堆石头少于r个,仍需要一个小时才能清理该堆。我们必须找到最小值r,以便我们可以在不到k个小时内删除所有石头或相等于k小时。
因此,如果输入如piles = [3, 6, 4] k = 5,则输出将为3,因为对于每小时r = 3个石头,我们可以在2小时内清除第二堆,然后在2下小时内清除第三堆,最后清除第一堆,需要1小时。
要解决此问题,请按照以下步骤进行 –
- l:= 1
- h:= piles的最大值
- r:= h
- 定义一个函数turns()。这将取r
- 返回列表中所有元素的总和与(对于piles中的每个b的天花板)
- 从主方法进行以下操作 –
- while l
- mid:=(l + h)的地板/ 2
- if turns(mid)> k,则
- l:= mid + 1
- 反之亦然,
- h:=中间值
- r:= 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