插入数字 | 滑动窗口 | 队列中的下标 | 最大值 |
2 | 2 | 0(2) | |
3 | 2,3 | 1(3) | |
4 | 2,3,4 | 2(4) | 4 |
2 | 3,4,2 | 2(4),3(2) | 5 |
6 | 4,2,6 | 4(6) | 6 |
2 | 2,6,2 | 4(6),5(2) | 6 |
5 | 6,2,5 | 4(6),6(5) | 6 |
1 | 2,5,1 | 6(5),7(1) | 5 |
vector<int> maxInWindows(const vector<int>& num, unsigned int size)
{
deque<int> que;//双向队列
vector<int> res;
int lenth = num.size();
if(lenth == 0 || size > lenth ||size <= 0)
return res;
for(int i = 0; i < size;i++)
{
while(!que.empty() && num[i] >= num[que.back()])
que.pop_back();//弹出比最后进入的元素小的数
que.push_back(i);
}
res.push_back(num[que.front()]);
for(int i = size;i < lenth;i++)
{
while(!que.empty() && num[i] >= num[que.back()])
que.pop_back();//弹出比最后进入的元素小的数
if(!que.empty() && que.front() <= i-size)
que.pop_front();
que.push_back(i);
res.push_back(num[que.front()]);
}
return res;
}
原文:https://www.cnblogs.com/Lune-Qiu/p/9275703.html