(周赛t4) 6143. 预算内的最多机器人数目

6143. 预算内的最多机器人数目

单调队列维护 滑动窗口中chargeTimes的最大值,二分枚举区间大小。

import collections

def work(cs, rs, k):
    dq = collections.deque()
    n = len(cs)
    cursum = 0
    for i in range(0, k):
        cursum += rs[i]
        while len(dq) > 0 and cs[dq[-1]] <= cs[i]:
            dq.pop()
        dq.append(i)
    
    res = k * cursum + cs[dq[0]]

    for i in range(k, n):
        if dq[0] <= i - k:
            dq.popleft()
        while len(dq) > 0 and cs[dq[-1]] <= cs[i]:
            dq.pop()
        dq.append(i)
        cursum -= rs[i-k]
        cursum += rs[i]
        res = min(res, k * cursum + cs[dq[0]])

    return res


class Solution(object):
    def maximumRobots(self, chargeTimes, runningCosts, budget):
        """
        :type chargeTimes: List[int]
        :type runningCosts: List[int]
        :type budget: int
        :rtype: int
        """
        n = len(chargeTimes)

        left = 0 
        right = n
        while left < right:
            mid = left + right + 1 >> 1
            res = work(chargeTimes, runningCosts, mid)
            if res<= budget:
                left = mid
            else :
                right = mid - 1

        return left


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容