题目链接:https://leetcode-cn.com/problems/sliding-window-maximum/
题目大意
略。
分析
可以用双端队列来维护窗口内最大值。
双端队列队首存窗口内最大值下标,双端队列内部下标单调递增,所对应值单调不增。
代码如下

1 class Solution {
2 public:
3 vector<int> maxSlidingWindow(vector<int>& nums, int k) {
4 vector< int > ans;
5 deque< int > DQ;
6
7 if(nums.empty()) return ans;
8 for(int i = 0; i <= k - 1; ++i) {
9 while(!DQ.empty() && nums[i] > nums[DQ.back()]) DQ.pop_back();
10 DQ.push_back(i);
11 }
12
13 ans.push_back(nums[DQ.front()]);
14 for(int i = k; i < (int)nums.size(); ++i) {
15 if(i - k == DQ.front()) DQ.pop_front();
16 while(!DQ.empty() && nums[i] > nums[DQ.back()]) DQ.pop_back();
17 DQ.push_back(i);
18 ans.push_back(nums[DQ.front()]);
19 }
20
21 return ans;
22 }
23 };
