题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
#include <deque>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size )
{
vector<int> ans;
//队列中存储数组的下标
deque<int> qe;
int k = 0;
//当窗口的大小为0时,直接返回一个空的数组
if(size == 0)return ans;
//遍历每个元素,相当于窗口从数组外面开始滑动(实现一个优先队列,最大的放在队头)
for(int i = 0 ; i < num.size() ; i++ )
{
//先检测大小是否超过窗口
if( !qe.empty() && i - qe.front() >= size ) qe.pop_front();
//一直循环,直到最大值存在于队首
while( !qe.empty() && num[i] > num[ qe.back() ] ) qe.pop_back();
//不管怎么,当前遍历的元素一定会入队
qe.push_back(i);
k++;
//当窗口全部进入数组后,开始向返回值输入。
if(k >= size )ans.push_back(num[qe.front()] );
}
return ans;
}
};
上海得物信息集团有限公司公司福利 1166人发布