leetcode 每日一题

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

2024年9月13日

滑动窗口+单调队列:

题目里表述的不太清楚,连续工作的机器人,就是求满足条件的最长子数组;这题可以说是滑动窗口最大值的进阶版本。

关于滑动窗口不要自己想当然的写,是有基本的模版的,要以右指针为基准;滑动窗口算法思想(附经典例题)_滑动窗口的思想-CSDN博客

滑动窗口表示当前选择的区间,我们要判断当前区间是否符合条件,即总开销是否小于budget;就需要:①当前区间的chargeTime最大值;②当前区间的所以runningCost之和。

  • 对于①,不就是滑动窗口最大值,只不过区间长度变化了,想想当时的做法
    • 单调队列:每遍历到一个新的元素,队列尾部的小于它的元素都出队,新元素入队,保证队列单调递减的特性;
    • 选出当前区间的max:这就简单了,判断队列头是否在当前区间内,不在就出队直到在当前区间内;
  • 对于②:
    • 首先清楚,当前区间;
    • 滑动窗口右指针每加一次,窗口就纳入了一个元素,这个元素的runningCost要算上;
    • 左指针每加一次,窗口就排除了一个元素,这个元素不在当前要判断的窗口内了,runningCost要减去;
  • 还有一点代码提示,单调栈里存的是数组的index,而不是数组元素;所以取元素的时候是nums[ deque.peek() ] 这种而不是deque.peek()

窗口区间缩小的条件是总开销大于budget,l++;直到窗口满足条件,r++遍历下一个右指针基准;对于滑动窗口的每个循环,都要入和出,在入和出的时候要做些什么,想清楚;

相关推荐
小白程序员成长日记1 分钟前
2025.12.11 力扣每日一题
数据结构·算法·leetcode
一碗白开水一2 分钟前
【论文阅读】Denoising Diffusion Probabilistic Models (DDPM)详细解析及公式推导
论文阅读·人工智能·深度学习·算法·机器学习
代码游侠7 分钟前
学习笔记——进程
linux·运维·笔记·学习·算法
天赐学c语言10 分钟前
12.11 - 最长回文子串 && main函数是如何开始的
c++·算法·leetcode
CoovallyAIHub11 分钟前
AI模型训练有哪些关键步骤与必备工具?从概念到可运行的智能模型
深度学习·算法·计算机视觉
程序员-King.15 分钟前
day122—二分查找—完成旅途的最少时间(LeetCode-2187)
算法·leetcode·二分查找·双指针
暗之星瞳15 分钟前
线性回归+实例
算法·回归·线性回归
little~钰16 分钟前
整体二分——上
算法
Swift社区22 分钟前
LeetCode 447 - 回旋镖的数量
linux·算法·leetcode
java修仙传30 分钟前
力扣hot100:路径总和III
数据结构·算法·leetcode