LeetCode:239. 滑动窗口最大值
class MonotonicQueue{
deque<int>maxq;
public:
void push(int n){
//将小于n的元素全部删除
while(!maxq.empty()&&maxq.back()<n){
maxq.pop_back();
}
maxq.push_back(n);
}
int max(){
return maxq.front();
}
void pop(int n){
if(n==maxq.front()){
maxq.pop_front();
}
}
};
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
MonotonicQueue window;
vector<int>res;
for(int i=0;i<nums.size();i++){
if(i<k-1){
window.push(nums[i]);
}
else{
window.push(nums[i]);
res.push_back(window.max());
window.pop(nums[i-k+1]);
}
}
return res;
}
};