滑动窗口最大值

队列没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构(缺省值即为默认值)

deque容器

 

题目:

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 。

其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的

复制代码
class Solution {
public:
    class Myqueue
    {
        public:
        deque<int> que;

        void pop(int value)//滑动窗口前端
        {
            if(!que.empty()&&value==que.front())//不一定每次都移除,可能在排序时已经移除
            {
                que.pop_front();
            }
        }

        void push(int value)//滑动窗口后端
        {
            while(!que.empty()&& value >que.back())//排序的同时移除元素,保证队列为单调从大到小
            {
                que.pop_back();
            }
            que.push_back(value);
        }

        int front()//返回最前端数值,即为最大值
        {
            return que.front();
        }
    };
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        Myqueue que;
        vector<int> result;//储存最大值的数组

        for(int i=0;i<k;i++)//先将前k个元素放入队列
        {
            que.push(nums[i]);
        }
        result.push_back(que.front());

        for(int i=k;i<nums.size();i++)
        {
            que.pop(nums[i-k]);//滑动窗口移除最前端元素
            que.push(nums[i]);//滑动窗口加入最后面的元素
            result.push_back(que.front());//记录对应最大值
        }

        return result;

    }
};
复制代码

 

posted @   该说不唠  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示