2pointer + 双端队列 计算区间max-min在一定范围的子数组个数

2pointer + 双端队列 计算区间max-min在一定范围的子数组个数


维护2个双端队列A,B。

A用来求滑动窗口的最大值,B最小值(这里的窗口大小没有限制)

假设我们窗口左边从第1位开始,右边扩到i位置时max-min大于给定的范围,那我们继续扩下去也没有必要,因为:

窗口扩张后,当前窗口的max只会比之前窗口的max大,min比之前窗口的min小。

那这时就可以求出窗口左边以第一位置开始的valid窗口的个数,就是窗口的宽度

接着左边从第一位移到第二位,此时也一定是个合理的窗口,因为:

右边扩不下去的时候,没有进行扩,这是左边右移一位,是之前的子窗口,max-min肯定满足条件

接下来就是同样的过程求以第2为开始的窗口的个数

。。。。。。


Notice:这是个sliding window(2 pointer,控制窗口大小)结合双端队列(求区间max/min)的神级题目啊