代码随想录:滑动窗口最大值
代码随想录:滑动窗口最大值
用双端队列写一个单调队列
class Solution {
public:
class biggerqueue {
public:
deque<int> target;
// int windows_size;
// biggerqueue(int size) { windows_size = size; }
//全错了,不能用size来pop掉首元素,因为push的时候会去掉末尾比目标元素小的元素
void pop(int value) {
if(!target.empty()&&target.front()==value){
target.pop_front();
}
}
void push(int value) {
if(value>target.front()){
while(!target.empty()){
target.pop_back();
}
target.push_back(value);
}else{
while(value>target.back()){
target.pop_back();
}
target.push_back(value);
}
}
int front() { return target.front(); }
};
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
biggerqueue q;
vector<int> res;
for (int i = 0; i < k; i++) {
q.push(nums[i]);
}
res.push_back(q.front());
for (int i = k; i < nums.size(); i++) {
q.pop(nums[i-k]);//如果上一个元素是最大的,push掉上一个元素
q.push(nums[i]);
res.push_back(q.front());
}
return res;
}
};