解题思路:首先是用暴力循环来解,其次便是用队列来模拟这个滑动窗口,同时要自定义三个函数,一个pop用来弹出来保证滑动窗口的移动,同时我们把最大的放在队列口那里,当每次有更大的就把原来的挤出栈外,一个push用来把前面不够大的元素排挤出队列并且把最大的那个数压入队列,还有一个find来找到最大的元素
代码实现如下:
class Solution {
private:
class MyQueue{
public:
deque<int>a;
void pop(int val){
if(!a.empty()&&val==a.front()){
a.pop_front();
}
}
void push(int val){
while(!a.empty()&&a.back()<val){
a.pop_back();
}a.push_back(val);
}
int findBest(){
return a.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
MyQueue b;vector<int>result;
for(int i=0;i<k;i++){
b.push(nums[i]);
}
result.push_back(b.findBest());
for(int i=k;i<nums.size();i++){
b.pop(nums[i-k]);
b.push(nums[i]);
result.push_back(b.findBest());
}return result;
}
};