充电桩问题

题目简述

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
posted @ 2022-10-23 23:55  戏剧玩家  阅读(97)  评论(0)    收藏  举报