滑动窗口的最大值
/* 双端队列实现滑动窗口最大值的输出
如果双端队列不为空,并且双端队列尾部的值小于或等于当前数组中的值,
双端队列弹出尾部值,否则直接压入双端队列的尾部,
如果滑过窗口的长度大于等于窗口长度,双端队列前端的值压入返回数组,
判断双端队列是否超出长度限制,超出从前端弹出
*/
class SlideWindow {
public:
vector<int> getMax(vector<int>& arr, int len) {
if (arr.empty() || len <= 0 || arr.size() < len) {
return vector<int>();
}
deque<int> dq;
vector<int> res;
for (int i = 0; i < arr.size(); i++) {
while (!dq.empty() && arr.at(dq.back()) <= arr.at(i)) {
dq.pop_back();
}
dq.push_back(i);
if (i >= (len - 1)) {
res.push_back(arr.at(dq.front()));
if (i - len + 1 >= dq.front()) {
dq.pop_front();
}
}
}
return res;
}
};
如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢