一,单调队列是什么(介绍)
数据结构
1.单调是数据(目前为线性表)排列的特征 ———
每下一位的数 都比 这一位 大(或小)
好吧,再说简单一点:递增(或递减)
2.队列是这些特征存在的依托 (结构)队列都知道吧
3.还有:(其余分类)
单调队列不一定是严格递增或递减的
可以为严格单调队列与非严格单调队列 (就是有没有数据值相等的情况)
e.g.
1 2 2 3 3 是非严格单调队列
1 2 3 4 是严格单调递增队列
(这些都是根据场景使用的)
二,单调队列的构造
1.单调队列是队列
普通的队列内部的数据值都是不规则的
而单调队列:数据排列递增或递减(这里记作①)
2.从普通队列为空,插入时改变操作,每次插入都要保证①
那就要在新加入数据时,改变不符合的数据
就有两种情况 —— 改变新数据 或 改变原来的数据
(1).不符合就不加新数据(只操作一次)
此处逻辑如下:
//数组模拟q l r //严格单调递增
//新数据为x
if(x<=q[r]) break;//加不了
else q[++r]=x;
(2).不符合就剔除原来的数据(可能为多次,用while或for+if)
此处逻辑如下:
while(q[r]>=x && l
(注意判断边界)
三,单调队列可以来干什么(基本应用,后续再讲其余)
在化学中,物质的性质决定它的用途
那么,在编程中,一种特殊的数据结构(此处指单调队列)的构造方法(如上)与特征就可以决定它的应用
构造后基本特征:
它能找到一组数据中最大值或最小值
可以抽象为 函数f(s,t) ——可以找到从位置s到位置t数据中最大值或最小值
并且可以连续性递推性质,即可以由 f(s,t)与值a[t+1]推出f(s,t+1)
(而且操作简便,不怎么耗时间)
总结:(基本应用)
单调队列可以解决 线性表 连续性 递推区间 的最大/小值问题