单调队列
单调队列(monotonic queues)是一种高效处理滑动窗口问题的数据结构,特别适合解决「区间最值」问题。
力扣题目239. 滑动窗口最大值。
1class Solution {
2public:
3 vector<int> maxAltitude(vector<int> &heights, int limit)
4 {
5 int n = heights.size();
6 deque<int> dq;
7 vector<int> ans;
8
9 for (int i = 0; i < n; ++i) {
10 // 维护长度
11 while (!dq.empty() && dq.front() <= i - limit) {
12 dq.pop_front();
13 }
14
15 // 维护单调性
16 while (!dq.empty() && heights[dq.back()] <= heights[i]) {
17 dq.pop_back();
18 }
19 dq.push_back(i);
20
21 // 滑动窗口长度时,记录最大值
22 if (i >= limit - 1) {
23 ans.push_back(heights[dq.front()]);
24 }
25 }
26 return ans;
27 }
28};