https://www.cnblogs.com/grandyang/p/4656517.html
使用双端队列维护一个单调递减的队列。使用双端队列的原因是,当顶部元素不在这个窗口的时候,就需要弹出,并且是从前面弹出,保证插入的元素的顺序不变。
单调递减是因为让双端队列的头部一直是当前窗口的最大值,只要这个最大值在窗口内,无论怎么滑都是最大值
递减是为了保证 后面的窗口可能出现的最大值
class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> result; deque<int> d; for(int i = 0;i < nums.size();i++){ if(!d.empty() && d.front() == i - k) d.pop_front(); while(!d.empty() && nums[d.back()] < nums[i]) d.pop_back(); d.push_back(i); if(i - k >= -1) result.push_back(nums[d.front()]); } return result; } };