单调队列

大概2014年10月去看了下单调队列,那算法还是挺不错的,总是能最快的求出在某个区间的最值。那时做了几道题巩固下,后面一直没看了,然后今天偶遇一道类似的题,https://leetcode.com/problems/sliding-window-maximum/,看到时想起来是这个算法。但是忘光了,于是重新去看了下单调队列,才搞出来,看来东西还是得常用,要不,容易忘。

单调队列核心知识点:

入队列时,只入序号,因为可以通过序号在数组中找到值。

假如是要求单调队列递增,每次从队尾添加元素时,如果它比队尾元素大,就一直往队头查找直到找到比要添加的元素大的队列里的元素然后添加在此元素后。如果它比队尾元素小就直接添加在队尾。

每次找最大元素时,则先看队头的序号是否保证在要求的距离区间内,如果不在,则要从队头删除一个元素后,再取队头元素。否则直接取队头元素。

原文地址:https://www.cnblogs.com/wen-ge/p/4700292.html