单调队列算法是一种数据结构,主要用于解决滑动窗口类问题,即在一个长度为 nn 的序列中,求每个长度为 mm 的区间的区间最值。 单调队列算法的时间复杂度为 O(n)O(n),相比 O(n \log n)O(nlogn) 的ST表和线段树在此问题上具有更好的优势。单调队列基本思想是维护一个双向队列(deque),它的性质是队列的头部...
单调队列的典型应用是在滑动窗口中寻找最大/最小值的问题。 单调队列和单调栈都是用于维护数据的单调性,但单调队列是双端队列,用于在滑动窗口中寻找最大/最小值,而单调栈是栈数据结构,用于寻找下一个更大/更小元素。 接上篇单调栈,下面我们对单调队列进行深度解析 单调队列: 单调队列是一种特殊的队列数据结构,...
单调队列(Monotonic Queue): 单调队列是一个双端队列,支持在队列两端进行插入和删除操作。 单调队列的特点是队列中的元素按照一定的单调性排列,常用的有单调递增和单调递减。 在插入新元素时,如果新元素破坏了当前的单调性,则在队尾删除一部分元素,直到满足单调性要求。这样可以保证队列中的元素保持单调性。 单调队列...
一、什么是单调栈和单调队列? (1)单调栈 从名字上就听的出来,单调栈中存放的数据应该是严格单调有序的,具有以下两个性质。 1. 满足从栈顶到栈底的元素具有严格的单调递增或单调递减性; 2. 满足栈的后进先出特性,即越靠近栈底的元素越早进栈。单调栈也分为单调递增栈和单调递减栈。
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit。 如果不存在满足条件的子数组,则返回 0。 解题思路 建立两个单调队列,分别维持当前窗口的最大值和最小值。记录子序列的最大值。 具体实现 1° 建立两个单调队列...
在一些场景中,需要这样一种数据结构:优先队列,功能不是先进先出,而是队前端一直是占权重最大的(如最大值或最小值),进入队列后依然要保持。每次弹入弹出都要保证队列单调性,即形成一个单调队列。 类似的功能也可以用大顶堆/小顶堆,采用完全二叉树数据结构来实现。不管是优先队列还是大顶堆,为便于理解,下文都只...
直接枚举所有可能的区域将无法在规定时间内完成。因此,我们需要设计一个时间复杂度为O(n)的算法,这时单调队列(一种数据结构)就能发挥作用。具体步骤是:首先从左到右扫描,记录每个高度对应的右边界,然后从右到左扫描,记录每个高度的左边界。最后,比较这些左、右边界对,找出最大面积。
本题的单调队列优化 这里的队列并不是直接取伤害的值,而是存着地址 我们可以通过qqq(队列)中的元素来找到dp中的元素 那么我们认为q[h]q[h]q[h]存着最低伤害的方案 为了保证f[i]f[i]f[i]取qqq中元素是合法的,也就是说,qqq中的元素必须在i−R−1i-R-1i−R−1以内,不然跳不到iii上面。
单调队列,即单调的队列。使用频率不高,但在有些程序中会有非同寻常的作用。 动态规划·单调队列的理解 做动态规划时常常会见到形如这样的转移方程: f[x] = max or min{g(k) | b[x] <= k < x} + w[x] (其中b[x]随x单调不降,即b[1]<=b[2]<=b[3]<=...<=b[n]) ...
为了鼓励 OI 选手学习文化课,CER 系列每次都会涉及一个课内(中学、大学)的基础知识点,本次也不...