class Solution:
def minNumberOfSeconds(self, mountainHeight: int, workerTimes: List[int]) -> int:
"""
由于花的时间越多,能够降低的高度也越多,所以有单调性,可以二分答案。
"""
def is_blue(T):
total = 0
for wt in workerTimes:
delta = 1 + 8 * T / wt
if delta < 0:
continue
x = int((math.isqrt(int(delta)) -1) // 2)
total += x
if total >= mountainHeight:
return True
return total >= mountainHeight
left = 0
right = max(workerTimes) * mountainHeight * (mountainHeight + 1) // 2
while left < right:
mid = (left + right) // 2
if is_blue(mid):
right = mid
else:
left = mid + 1
return left
基础算法-二分 LeetCode-3296. 移山所需的最少秒数 1695分
于 2024-10-11 09:57:06 首次发布