leetcode 239 单调队列 需要一些记忆

滑动窗口最大值,刚看到,一种朴素的思想扑面而来,就是优先队列+map,是可以解决这个问题的,就是空间复杂度稍高,并且不优雅,并且 O(NlogN)

一种更为优雅的做法是单调队列,这个就稍微比较考验技巧了,如果是第一次听说,最好还是全文背诵。。。

这里,存下标的原因是,由于我们可能会把队里的元素删光,所以不知道最前面的是不是该被删的老的,还是新放的,放下标的处理会更为简单,代码如下:

cpp 复制代码
typedef vector<int> V;

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> q;
        V ans;

        int n = nums.size();
        
        for(int i=0;i<n;i++)
        {
            int num = nums[i];
            while(q.size() > 0 && nums[q.back()] <= num)q.pop_back();

            while(q.size() > 0 && q.front() <= i-k)q.pop_front();

            q.push_back(i);

            if(i>=k-1)
            ans.push_back(nums[q.front()]);
        }

        return ans;
    }
};
相关推荐
漫霂2 小时前
二叉树的统一迭代遍历
java·算法
炽烈小老头2 小时前
【每天学习一点算法 2026/04/08】阶乘后的零
学习·算法
Mr_Xuhhh2 小时前
算法刷题笔记:从滑动窗口到哈夫曼编码,我的算法进阶之路
开发语言·算法
MicroTech20252 小时前
突破虚时演化非酉限制:MLGO微算法科技发布可在现有量子计算机运行的变分量子模拟技术
科技·算法·量子计算
hssfscv2 小时前
软件设计师下午题六——Java的各种设计模式
java·算法·设计模式
珂朵莉MM2 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--多策略混合算法
人工智能·算法
罗西的思考2 小时前
【OpenClaw】通过 Nanobot 源码学习架构---(6)Skills
人工智能·深度学习·算法
枫叶林FYL2 小时前
【自然语言处理 NLP】7.2 红队测试与对抗鲁棒性(Red Teaming & Adversarial Robustness)
人工智能·算法·机器学习
qiqsevenqiqiqiqi2 小时前
字符串模板
算法