class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if(nums.size()==0) return {};
deque<int>deqmax;
vector<int>res;
//首先第一个窗口开始进队
for( int i=0;i<nums.size();i++ )
{
//向右扩一个
//如果队列一开始不为空且存的下标所指的值比要入队的数小,就循环出队
while( !deqmax.empty()&& nums[deqmax.back()]<=nums[i] )
{
deqmax.pop_back();
}
deqmax.push_back( i );
//向左缩一个
//如果这个值需要更新(头的下标就是需要缩的那个下标的话)那么就出队
if( deqmax.front()==i-k )
{
deqmax.pop_front();
}
//把窗口最大值记录
if( i>=k-1 )
{
res.push_back( nums[deqmax.front()] );
}
}
return res;
}
};