- 单调递减队列
- 利用单调队列存下标, 头部是区间最大值 max 对应的下标
- 根据当前下标对应值的大小,把当前下标放到队列合适的位置
- 只要构成了滑动窗口,就可以把队列最大值(头部)对应的值 放到结果数组中
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> q;
vector<int> res;
for(int i = 0; i < nums.size(); i ++ ) {
if(q.size() && i - k + 1 > q.front()) q.pop_front();
while(q.size() && nums[i] >= nums[q.back()]) q.pop_back();
q.push_back(i);
if(i >= k - 1) res.push_back(nums[q.front()]);
}
return res;
}
int main(){
vector<int> nums = {1,3,-1,-3,5,3,6,7};
vector<int> res = maxSlidingWindow(nums, 3);
for(auto x : res)
cout << x << ' ';
return 0;
}