239. 滑动窗口最大值
class Solution {
public:
deque<int> a;
void pop(int val) {
if (!a.empty() && a.front() == val) {
a.pop_front();
}
}
void push(int val) {
while (!a.empty() && a.back() < val) {
a.pop_back();
}
a.push_back(val);
}
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> ret;
for (int i = 0; i < k; i++) {
push(nums[i]);
}
ret.push_back(a.front());
int q =a.front();
for (int i = k; i < nums.size(); i++) {
pop(nums[i-k]);
push(nums[i]);
q =a.front();
ret.push_back(q);
}
return ret;
}
};
把实际问题分为三部分
1.将队列中小于将要填入的数字出队
2.将第i-k个数字,即将要超出范围的数字出队
3.获得队列的最大值,即返回队列的头
即可只维护几个有可能成为最大数的值