题解 | #滑动窗口的最大值#

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

#include <queue>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型vector 
     * @param size int整型 
     * @return int整型vector
     */
    vector<int> maxInWindows(vector<int>& num, int size) {
        // write code here
        vector<int> re;

        if(size==0||num.size()<size)return re;//判空

        priority_queue<int> pq;//当前窗口最大值
        priority_queue<int> pt;//已移除窗口最大值
        queue<int>q;//窗口队列

        int i=0,j=size;

        for(;i<size;i++){//初始化窗口
            pq.push(num[i]);
            q.push(num[i]);
        }


        re.push_back(pq.top());//第一个窗口最大值
        
        for(i=0;j<num.size();i++,j++){
            int tmp=q.front();
            q.pop();
            if(!pq.empty()&&pq.top()==tmp){//最大值被移出窗口
                pq.pop();
            }
            while(!pq.empty()&&!pt.empty()&&pq.top()==pt.top()){//除去不在窗口的最大值
                pq.pop();
                pt.pop();
            }
            q.push(num[j]);//移入新元素
            pq.push(num[j]);
            pt.push(num[i]);
            re.push_back(pq.top());
        }


        return re;
    }
};

全部评论

相关推荐

MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
人来疯的六边形战士bbq了:你尝试下在boss 上把学校改为天津大学,其他的不用改就有人回复了,然后你会怀疑普通学校跟985用的是不是同一个软件
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务