- 定义单调栈;
- 如果当前元素大于队尾对应元素,弹出队尾元素;
- 如果队首元素和当前遍历索引超过窗口大小,弹出队首元素;
- 将遍历索引加入队列,如果索引大于窗口大小,将队首元素放入结果。
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
vector<int> result;
if(size > num.size() || size == 0 || num.size() == 0) return result;
int len = num.size();
deque<int> dq;
for (int i = 0; i < len; i++) {
while (!dq.empty() && num[i] > num[dq.back()]) {
dq.pop_back();
}
while (!dq.empty() && i - dq.front() >= size) {
dq.pop_front();
}
dq.push_back(i);
if (i + 1 >= size) {
result.push_back(num[dq.front()]);
}
}
return result;
}
};