数据结构-单调队列
滑动窗口
时间复杂度O(n)
1.滑动窗口中的最大值
C++
deque<int> d;//数组nums[1-n],窗口大小为k
for(int i=1;i<=n;i++)
{
while(!d.empty()&&d.front()+k<=i) d.pop_front();
while(!d.empty()&&nums[d.back()]<=nums[i]) d.pop_back();
d.push_back(i);
if(i>=k) printf("%d",d.front());
}
2.滑动窗口中的最小值
C++
deque<int> d;//数组nums[1-n],窗口大小为k
for(int i=1;i<=n;i++)
{
while(!d.empty()&&d.front()+k<=i) d.pop_front();
while(!d.empty()&&nums[d.back()]>=nums[i]) d.pop_back();
d.push_back(i);
if(i>=k) printf("%d",d.front());
}