题目描述
解题思路
思路参考 代码随想录
大致思路总结起来就是:
用双向队列deque 实现一个单调队列,使其具备双向队列的基本操作方法,同时队列头部永远保存着队列内元素的最大值,且队列内元素从头到尾按照非升序排列。若要返回某一区间内的最大值,只需要返回其pop_front()的值就行。
代码实现
class Solution
{
public:
class Myqueue
{
public:
deque<int> que;
void pop(int value)
{
if(!que.empty()&&value==que.front())
{
que.pop_front();
}
}
void push(int value)
{
while(!que.empty()&&que.back()<value)
{
que.pop_back();
}
que.push_back(value);
}
int front()
{
return que.front();
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k)
{
Myqueue myqueue;
vector<int> res;
for(int i=0;i<k;i++)
{
myqueue.push(nums[i]);
}
res.push_back(myqueue.front());
for(int i=k;i<nums.size();i++)
{
myqueue.pop(nums[i-k]);
myqueue.push(nums[i]);
res.push_back(myqueue.front());
}
return res;
}
};