给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回 滑动窗口中的最大值
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sliding-window-maximum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
deque的操作(双向队列)
push_back push_front pop_back pop_front front() back() empty()
创建一个类 Myqueue 里面基本实现的用的是deque deq;
里面实现push pop getmax
class Solution {
private:
class Myqueue
{
public:// !!!!!public
deque<int> deq;
void push(int m)
{
while(!deq.empty() && deq.back() < m)
{
deq.pop_back();
}
deq.push_back(m);
}
void pop(int n)
{
if(!deq.empty() && deq.front()==n)
{
deq.pop_front();
}
}
int getmax()
{
return deq.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> re;
Myqueue s;
for(int i=0; i<k; i++)
{
s.push(nums[i]);
}
re.push_back(s.getmax());
int d = 0;
for(int j=k; j<nums.size();j++)
{
s.pop(nums[d]);// push pop 的顺序都可以
s.push(nums[j]);
d++;
re.push_back(s.getmax());
}
return re;
}
};