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.获得队列的最大值,即返回队列的头
即可只维护几个有可能成为最大数的值
本文介绍了一个使用C++实现的滑动窗口最大值算法,通过维护一个双端队列(deque)来高效地处理数组中每个大小为k的子数组的最大值问题。算法分为三个步骤:移除小于当前元素的队列元素、移除超出范围的旧元素、更新并存储最大值。
257

被折叠的 条评论
为什么被折叠?



