leetcode-华为专题-239. 滑动窗口最大值

 

leetcode-华为专题-239. 滑动窗口最大值

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> s;
        vector<int> res;

        for(int i = 0; i < nums.size(); i++){

            //cout<<"nums[i] :"<<nums[i]<<"  "<<nums[s.back()]<<endl;
            // 如果队头下标不在窗口范围内,则从队头弹出。
            // 因为队头到队尾进入队列的顺序是从早到晚
            while(!s.empty()&&i-s.front()>=k) {
                s.pop_front();
            }
            // 如果当前元素大于等于队尾元素,则不断弹出
            while(!s.empty()&&nums[i]>=nums[s.back()]) {
                s.pop_back();
            }
            // 最后再将当前元素从队尾加入,维护一个从队头到队尾的递减队列
            // 每次队头就是每个滑动窗口的最大值所在下标。
            s.push_back(i);
            if(i>=k-1)
                res.push_back(nums[s.front()]);
        }
        return res;
    }
};

 

上一篇:leetcode-239. 滑动窗口最大值


下一篇:239滑动窗口最大值 堆排序然后根据下标过滤掉不属于窗口内的元素