https://leetcode.com/problems/sliding-window-maximum/’
使用一个双端队列
保证队列的前端是当前搜索的k个元素中最大的元素
当从队列的前端到 当前搜索的元素 的总数大于了k 则删除最前端的元素
从第K个元素开始 每次向结果中添加队列最前面的元素
#include <vector>
#include <deque>
using namespace std;
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if (k <= 0)
return{};
vector<int> result;
deque<int> que;
for (int i = 0; i < nums.size(); i++)
{
while(!que.empty() && nums[que.back()] < nums[i])
{
que.pop_back();
}
que.push_back(i);
if (i - que.front() + 1 > k)
que.pop_front();
if(i>=k-1)
result.push_back(nums[que.front()]);
}
return result;
}
};