1. 解题思路
这一题的思路的话我们采用的是一个二分法的思路,找到一个最大的时间 T T T,使得在这个时间 T T T之内所有workers移除的山的高度的总和不低于给定值 H H H。
而对于在某个给定的时间
T
T
T下,工人
i
i
i能够移除的山的高度
h
i
h_i
hi满足如下关系式:
t
i
×
h
i
(
h
i
+
1
)
2
<
=
T
t_i \times \frac{h_i(h_i+1)}{2} <= T
ti×2hi(hi+1)<=T
即有:
h
i
<
=
−
1
+
1
+
8
T
t
i
2
h_i <= \frac{-1+\sqrt{1+\frac{8T}{t_i}}}{2}
hi<=2−1+1+ti8T
因此,我们用二分法查找一下临界值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minNumberOfSeconds(self, mountainHeight: int, workerTimes: List[int]) -> int:
n = len(workerTimes)
r = math.ceil(mountainHeight / n)
def is_possible(t):
h = 0
for wt in workerTimes:
h += int((math.sqrt(8*t/wt + 1) - 1) / 2)
return h >= mountainHeight
i, j = 0, max(workerTimes) * r * (r+1) // 2
while j-i > 1:
t = (i+j) // 2
if is_possible(t):
j = t
else:
i = t
return j
提交代码评测得到:耗时277ms,占用内存17.8MB。

被折叠的 条评论
为什么被折叠?



