在Python中查找K小时内的石头删除率程序

在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程