leetcode 239

滑动窗口和单调队列来解这道题。时间复杂度是线性的。单调队列的队头是最大值的下标,我们要找的也是最大值的下标。奥不是,是找最大值。所以的话,知道下标找最大值也是欧克的。没啥问题。遍历数组的时候,比当前元素小的队尾元素和被移动出去的元素都是废物,或者说无效的元素。双端队列支持常数时间内插入和删除,并且是移动过程中的最大值都必须要维护出来。队头是最大值,始终单调递减,有点儿没看懂?如果当前元素比最大值要小,那么就怎么样呢,如果要大,肯定就要更新了,但是必须要在这个固定的长度里面。实际上很像贪心,就是每次遍历到了一个新的元素,我们必须把比当前元素小的元素都删除,是否是 while 这种删除,好像是。然后再把当前元素加到单调队列里面去。好像也没有那么难,但是吹牛逼谁不会呢。我现在感觉自己很容易眼睛疲劳。我基本上废了。尽量学习 20 分钟就休息一会儿。眼睛是自己的,身体健康是自己的。这非常重要。

cpp 复制代码
class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        deque<int> q;
        for ( int i = 0; i < nums.size(); i++ ) {
            while ( !q.empty() && q.front() <= i - k ) { // 单调队列非空,并且队头在窗口左边
                q.pop_front();// i - k 是窗口左边第一个元素
            }
            while ( !q.empty() && nums[q.back()] < nums[i] ) {
                q.pop_back();
            }
            q.push_back( i );
            if ( i - k + 1 >= 0 ) {
                res.push_back( nums[q.front()] );
            }
        }
        return res;
    }
};
相关推荐
数模竞赛Paid answer8 小时前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序
算法·数学建模·中青杯
银-豆豆8 小时前
数据结构与算法-动态规划、回溯与贪心
算法·动态规划
想吃火锅100510 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
hold?fish:palm10 小时前
24 回文链表
数据结构·c++·链表
Nil20810 小时前
leetcode 54螺旋矩阵
算法·leetcode·矩阵
依然鸣11 小时前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
qeen8714 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
lucas_AI14 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
冻柠檬飞冰走茶15 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
民乐团扒谱机15 小时前
【微实验】倒谱算法(Cepstrum)深度解析:原理、数学推导与代码实现
人工智能·算法·语音识别