leetcode 每日一题

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

2024年9月13日

滑动窗口+单调队列:

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

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

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

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

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

相关推荐
:-)1 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
Jerry5 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发6 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星6 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮6 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84076 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>7 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC8 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC8 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师8 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法