原理非常的简单。
创建一个数组,当作队列。
定义 t t t 和 w w w。分别代表队列的头和尾。
主要部分有两个。
第一部分:
while(t<w&&q[t]+k<=i)
t++;
t<w
保证了队列头的下标一定大于尾。
q[t]+k
保证了队列中的元素没有过期
解释:
q[t]
代表了队列中最前面的数的下表,如果最前面的数的加上
k
k
k 还未超过i说明这个元素太后面了,要向前移。
第二部分
while(t<w&&a[q[w-1]]<a[i])
w--;
t<w
同上
a[q[w-1]]<a[i]
中 q[w-1]
代表了队尾元素,这样子可以维护队列中的元素单调递增。
同理,改为 > > > 则是维护队列内元素单调递减。
总结
非常基础的数据结构,也很实用。