随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

题目:

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> result;
        if(nums.size()==0) return result;
        deque<int> que;                         //要维护这样一个队列:队列能够自动弹出和压入元素,队列首部到尾部递减。要注意存放的元素是数组的下表。
        for(int i=0;i<nums.size();i++){          
            while(!que.empty()&&nums[que.back()]<=nums[i]){     //要保证队列首部到尾部递减,保证了队列首部是当前(每一个)窗口的最大值
                que.pop_back();
            }
            if(!que.empty()&&i-que.front()+1>k){               //队列最大值不在窗口范围内,弹出。两个!que.empty()都不能省略,避免对空队列进行操作
                que.pop_front();
            }
            que.push_back(i);
            if(i>=k-1){                                       //当遍历元素等于窗口数时开始记录最大值和滑动窗口
                result.push_back(nums[que.front()]);
            }
        }
        return result;
    }
};
posted on   孜孜不倦fly  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示