1. 如果队列中的第一个元素已经超出了窗口的范围,则将其从队列中删除。 2. 删除队列中所有小于当前元素的元素。 3. 将当前元素添加到队列的末尾。 4. 如果我们已经处理了k个元素,则输出队列中的第一个元素,即当前窗口的最大值。 如果我们想要找到当前窗口的最小值,我们只需要将第2步中的“大于等于”改为“...
了解了滑动窗口,让我们再来了解一下单调队列 单调队列,即单调递减或单调递增的队列。 但是,这个说法很笼统,到底什么是单调队列呢? 这里有张我做的图: 从这张图里,我们能看出: 单调递增队列(从队首到队尾递增)的维护方法: 入队一个数,就把它前面所有比它大的数给弹掉 准确地说,是把前面所有比它大的数给弹...
单调队列与单调栈的思路是非常类似的,单调栈在每次遍历中,会将栈顶 “被压扁的小杠铃片” 弹出栈,而单调队列在每次遍历中,会将队尾中 “被压扁的小杠铃片” 弹出队。单调栈在栈顶过滤无效元素,在栈顶获取目标元素,单调队列在队尾过滤无效元素,在队头获取目标元素。 理解了单调队列的解题模板后,我们来分析它的...
classSolution{funmaxSlidingWindow(nums:IntArray,k:Int):IntArray{// 结果数组valresult=IntArray(nums.size-k+1){-1}// 单调队列(基于双端队列)valqueue=LinkedList<Int>()for(indexinnums.indices){// while:队尾元素比当前元素小,说明队尾元素不再可能是最大值,后续不再考虑它while(!queue.isEmpty()&...
数组,用数组实现队列,单调性 目标 单调队列模板题 What 学过计算机网络的同学,都知道滑动窗口协议(Sliding Window Protocol),该协议是 TCP协议 的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协...
1)单调队列 2)优先队列 1. 题目描述 题目链接:239. 滑动窗口最大值 2. 思路分析 1)单调队列 由于我们需要求出的是滑动窗口的最大值,如果当前的滑动窗口中有两个下标 i 和 j,其中 i 在 j 的左侧(i<j),并且 i 对应的元素不大于 j 对应的元素(nums[i] ≤ nums[j]),那么会发生什么呢?
单调队列-滑动窗口 文章目录 Question Ideas Code Question 给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7],k...
【栗子算法】蓝桥杯各种考点,单调队列算法,滑动窗口经典题目,详细解释!, 视频播放量 466、弹幕量 0、点赞数 8、投硬币枚数 2、收藏人数 14、转发人数 2, 视频作者 栗子算法, 作者简介 喜欢就订阅我!!赞我!拿硬币砸我!!,相关视频:蓝桥杯结束还有哪些算法竞赛可以
4. 单调队列解法 我们可以维护一个数据容器,第一个元素先放到容器中,后续每处理一个元素,先观察容器中刚刚加入的元素,如果刚刚加入的元素小于当前元素,则直接将其丢弃(因为新增加的元素排在后面,会更晚地离开滑动窗口,所以中间的小元素永远没有资格了),避免拉低效率。 继续分析我们还发现: 这个数据容器中后进...
回到这道题的场景,窗口向前滑动的时候,要添加一个数同时减少一个数,所以想在 O(1) 的时间得出新的最值,就需要「单调队列」这种特殊的数据结构来辅助了。 一个普通的队列一定有这两个操作: class Queue { void push(int n); // 或 enqueue,在队尾加入元素 n ...