单调栈和单调队列

先把朴素算法想清楚,再分析性质,进而推进成一个具有单调性的栈或者队列。即单调栈/单调队列。(重要)

例题:leetcode239 单调队列实现滑动窗最大值
https://leetcode-cn.com/problems/sliding-window-maximum/submissions/

下面利用数组模拟一个队列。

(1)hh 队列左端点,tt队列右端点
(2)[hh,tt]双闭区间,代表队列中有效区间。因此 ,hh>tt时,代表队列为空。


#define N 100050
int a[N];

vector<int> maxSlidingWindow(vector<int>& nums, int k) {
    int hh = 0, tt = -1;//hh队列 左端点    tt队列 右端点
    vector<int> ans;
    for (int i = 0; i < nums.size(); i++){
        if (tt >= hh && a[hh] < i - k + 1) hh++;
        while (tt>=hh &&nums[a[tt]] <= nums[i])tt--;
        a[++tt] = i;
        if (i >= k - 1)
            ans.push_back(nums[a[hh]]);
    }
    return ans;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。