待优化
vector<int> maxInWindows(const vector<int>& num, unsigned int size){deque<int> win;vector<int> ans;int _max = INT_MIN;if(num.size() < size || size == 0)return ans;for(int i = 0;i < num.size();i++){if(win.size() < size)win.push_back(num[i]);else{for(int j = 0;j < size;j++)_max = max(_max, win[j]);ans.push_back(_max);win.pop_front();win.push_back(num[i]);_max = INT_MIN;}}for(int j = 0;j < size;j++)_max = max(_max, win[j]);ans.push_back(_max);return ans;}
//单调队列
vector<int> maxInWindows(const vector<int>& num, int W)
{
if(W == 0)return {};
int N = num.size();
vector<int> ret;
list<int> L;
for(int i = 0 ; i < N ; ++i){
//从队尾删除比num[i]小的数
while(!L.empty() && num[*L.rbegin()] < num[i])
L.pop_back();
//将i加入队尾
L.push_back(i);
//从队首删除过期的数
while(!L.empty() && (*L.begin() <= i - W))
L.pop_front();
//将以i结尾的区间最值加入答案
if(i >= W - 1)
ret.push_back(num[*L.begin()]);
}
return ret;
}
