用 Python 编写程序,用于计算 K 小时内移除石头的速率
pythonserver side programmingprogramming更新于 2026/1/18 23:40:17
假设我们有一个数字列表,称为"堆"和一个值 k。piles[i] 表示第 i 堆上的石头数量。每个小时,我们选择任意堆并从该堆中移除 r 个石头。如果我们选择一个少于 r 个石头的堆,则仍然需要一个小时才能清除该堆。我们必须找到 r 的最小值,以便我们可以在小于或等于 k 小时内移除所有石头。
因此,如果输入为像 pilles = [3, 6, 4] k = 5,则输出将为 3,因为对于每小时 r = 3 块石头,我们可以在 2 小时内清除第二堆,然后在 2 小时内清除第三堆,并在 1 小时内清除第一堆。
为了解决这个问题,我们将遵循以下步骤 −
- l := 1
- h := 堆的最大值
- r := h
- 定义一个函数turns()。这将需要 r
- 返回列表中所有元素的总和,其中 (每个 b 的 b / r 的上限)
- 从主方法中,执行以下操作 −
- 当 l < h 时,执行
- mid := floor of (l + h) / 2
- 如果turns(mid) > k,则
- l := mid + 1
- 否则,
- h := mid
- 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 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/
打印
下一节:Python Pandas - 从具有特定时间序列频率的 DateTimeIndex 中提取时区 ❯❮ 上一节:Python Pandas - 从具有特定时间序列频率的 DateTimeIndex 中提取日期的季度

