1.利用单调栈(单调递减)来存储每一次滑动窗口的最大值的下标。注意要实时的判断单调栈的栈底值(最大)是否存在于当前窗口内。
然后根据结果进行值的更新
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if(k<2) return nums;
int n=nums.size(),front=-1,top=-1;
vector<int> st,ans;
for(int i=0;i<n;i++){
while(top!=front&&nums[st[top]]<nums[i]){
st.pop_back();
top--;
}
st.push_back(i);
top++;
if(st[front+1]<=i-k) front++;
if(i-k>=-1) ans.push_back(nums[st[front+1]]);
}
return ans;
}
};