使用队列的方法,维持一个最大尾队列,判断进来的元素是否比末尾的数更大,如果更大,则pop掉新进来的元素之前的数,更小则加入队列中。
class Solution {
private:
class MyQue{
public:
deque<int> que;
void pop(int value){
if (!que.empty() && value == que.front()){
que.pop_front();
}
}
void push(int value){
while(!que.empty() && value > que.back()){
que.pop_back();
}
que.push_back(value);
}
int front(){
return que.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
MyQue que;
vector<int>result;
for (int i = 0;i < k; i++){
que.push(nums[i]);
}
result.push_back(que.front());
for(int i = k;i <nums.size();i++){
que.pop(nums[i -k]);
que.push(nums[i]);
result.push_back(que.front());
}
return result;
}
};