充电桩问题
题目简述
m个数字,每次选n个数字-1,数字不能小于0,最多能操作多少次。
相同题目.
n个大楼,m个电桩,每个电桩右mi个电,要保证每栋大楼都有电,最长能维持多久。
leetcode.2141
我的思路
无
思路
二分答案法,求得T = 总电量/n,然后二分0-T,判断是否坚持t分钟,若可以,就往右继续二分,否则往左。
假设右x个大于t的电桩,先对其分配,消耗tx电量,
再判断剩下电桩的总电量能否满足剩余的大楼t分钟。即判断 sum(rest mi) 能否大于 t(n-x)。
两边同时加上tn,可得:sum(rest mi) + tx 和 t*n。
前部分为对电池的每一项 min(mi, t) 求和。
代码
class Solution:
def maxRunTime(self, n: int, batteries: List[int]) -> int:
left, right, ans = 0, sum(batteries) // n, 0
while left <= right:
mid = (left + right) // 2
total = 0
for cap in batteries:
total += min(cap, mid)
if total >= n * mid:
ans = mid
left = mid + 1
else:
right = mid - 1
return ans

浙公网安备 33010602011771号