首页 > 其他分享 >代码随想录:滑动窗口最大值

代码随想录:滑动窗口最大值

时间:2024-12-16 21:33:41浏览次数:3  
标签:target int 最大值 随想录 back value front push 滑动

代码随想录:滑动窗口最大值

用双端队列写一个单调队列

class Solution {
public:
    class biggerqueue {
    public:
        deque<int> target;

        // int windows_size;
        // biggerqueue(int size) { windows_size = size; }
        //全错了,不能用size来pop掉首元素,因为push的时候会去掉末尾比目标元素小的元素

        void pop(int value) {
            if(!target.empty()&&target.front()==value){
                target.pop_front();
            }
        }

        void push(int value) {
            if(value>target.front()){
                while(!target.empty()){
                    target.pop_back();
                }
                target.push_back(value);
            }else{
                while(value>target.back()){
                    target.pop_back();
                }
                target.push_back(value);
            }
        }

        int front() { return target.front(); }
    };

    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        biggerqueue q;
        vector<int> res;
        for (int i = 0; i < k; i++) {
            q.push(nums[i]);
        }
        res.push_back(q.front());
        for (int i = k; i < nums.size(); i++) {
            q.pop(nums[i-k]);//如果上一个元素是最大的,push掉上一个元素
            q.push(nums[i]);
            res.push_back(q.front());
        }
        return res;
    }
};

标签:target,int,最大值,随想录,back,value,front,push,滑动
From: https://www.cnblogs.com/huigugu/p/18611149

相关文章