【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)

LeetCode 启动!

每日一题的题解重新开始连载!

题目:预算内的最多机器人数目

题目链接:2398. 预算内的最多机器人数目

题目描述

代码与解题思路

go 复制代码
func maximumRobots(chargeTimes []int, runningCosts []int, budget int64) (ans int) {
    l, sum, mx := 0, 0, []int{0}
    for r := range chargeTimes {
        // 求 k 个机器人中最大充电时间,单调队列维护一下
        for len(mx) > 0 && mx[len(mx)-1] < chargeTimes[r] {
            mx = mx[:len(mx)-1]
        }
        mx = append(mx, chargeTimes[r])
        // k 个机器人的运行时间之和,直接累加
        sum += runningCosts[r]
        for len(mx) > 0 && int64(mx[0] + (r-l+1)*sum) > budget { // 维护滑窗
            if chargeTimes[l] == mx[0] { // 注意是遇到单调队列中的最大值才出队列
                mx = mx[1:]
            }
            sum -= runningCosts[l]
            l++
        }
        ans = max(ans, r-l+1)
    }
    return ans
}

这道题是一道经典的滑动窗口题目,题目要求找预算内连续的最多的机器人数目,然后给了一个公式:max(chargeTimes) + k * sum(runningCosts),简洁明了,直接根据这个公式用滑窗即可

求 sum 容易,直接累加就行,怎么灵活维护一个子数组的最大值呢?这就需要用到单调队列,通过单调队列实时维护当前子数组的最大值,能够很方便的对子数组的最大值进行删改

最后记录下最多的机器人数目并返回即可

视频实况(包含往期每日一题,可能会有讲解)

视频链接:【【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)】

每天进步一点点

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
查理零世19 分钟前
【蓝桥杯集训·每日一题2025】 AcWing 6134. 哞叫时间II python
python·算法·蓝桥杯
仟濹19 分钟前
【二分搜索 C/C++】洛谷 P1873 EKO / 砍树
c语言·c++·算法
紫雾凌寒28 分钟前
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
人工智能·python·神经网络·算法·机器学习·卷积神经网络
京东零售技术1 小时前
AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践
算法
且听风吟ayan2 小时前
leetcode day19 844+977
leetcode·c#
MiyamiKK572 小时前
leetcode_位运算 190.颠倒二进制位
python·算法·leetcode
C137的本贾尼2 小时前
解决 LeetCode 串联所有单词的子串问题
算法·leetcode·c#
青橘MATLAB学习2 小时前
时间序列预测实战:指数平滑法详解与MATLAB实现
人工智能·算法·机器学习·matlab
lingllllove2 小时前
matlab二维艾里光束,阵列艾里光束,可改变光束直径以及距离
开发语言·算法·matlab
88号技师2 小时前
2025年2月一区SCI-海市蜃楼搜索优化算法Mirage search optimization-附Matlab免费代码
开发语言·人工智能·算法·机器学习·matlab·优化算法