AcWing 79. 滑动窗口的最大值
原题链接
困难
作者:
adamXu
,
2020-10-10 09:12:47
,
所有人可见
,
阅读 505
class Solution {
public:
vector<int> maxInWindows(vector<int>& nums, int k) {
//利用一个双向的单调队列维护数据,队列中存下标,下标对应元素数值单调减少,
//如果当前对头元素超过了滑动窗口的最大值,则对头弹出,如果当前欲添加的元素
//数值大于等于对头元素,弹出对头,当前元素入队
deque<int> q;
vector<int> res;
int n = nums.size();
for(int i = 0;i < n;++i){
while(q.size() && q.front() <= i - k) q.pop_front();
while(q.size() && nums[q.back()] <= nums[i]) q.pop_back();
q.push_back(i);
if(i >= k - 1) res.push_back(nums[q.front()]);
}
return res;
}
};