本文最后更新于627 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
题目链接/文章讲解/视频讲解:https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.html
1.就这个题不看视频你就是杀了我我也想不出来用个单调队列,还是自定义的,能想到大根堆,但是大根堆并不满足题意,所以当我看了视频明白了如何构造这个单调队列之后一切都迎刃而解了,困难题也不过如此嘛,但这个题我还是要多做几次,这个思路要变成我自己也可以想出来才行。
2.在这个题里,我遇到的第一个问题就是不清楚双向队列的常用操作,所以这个基本的数据结构我还需要一些时间去完善我自己的记忆和熟练度,第二个问题就是我把自定义class定义为private所以在调用函数的时候出现无法访问的情况,我找了半天原因发现是我没有把我自定义类的函数公有化public。真是一个小问题的大乌龙。
CPP
class Solution {
private:
class Mydeque{
public:
deque<int>dq;
void pop(int val){
if(!dq.empty() && val == dq.front()){
dq.pop_front();
}
}
void push(int val){
while(!dq.empty() && val>dq.back()){
dq.pop_back();
}
dq.push_back(val);
}
int getMaxValue(){
return dq.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int>res;
Mydeque dq;
for(int i = 0;i<k;i++){
dq.push(nums[i]);
}
res.push_back(dq.getMaxValue());
for(int i = k;i<nums.size();i++){
dq.pop(nums[i-k]);
dq.push(nums[i]);
res.push_back(dq.getMaxValue());
}
return res;
}
};