题目浅析

思路分享

  • 二分答案的基本思路可看【Leetcode Daily】1283使结果不超过阈值的最小除数

  • 这是二分答案系列的第四题,十分佩服发明这个方法的人,虽然判断答案是否合适的部分看似时间复杂度高,但可以通过二分的方式在一个答案区间内尽可能块地找到正解。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def minEatingSpeed(self, piles: List[int], h: int) -> int:
left, right = 0, max(piles)+1
while left+1 < right:
mid = (left+right) // 2

# 这一步是验证答案
use = sum((num-1)//mid + 1 for num in piles)

if use <= h:
right = mid
else:
left = mid

return right