滑动窗口
给定一个数组。
有一个大小为k 的滑动窗口,它从数组的最左边移动到最右边。
你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。
#include <iostream>
#include <deque>
using namespace std;
const int N = 1e6 + 10;
int a[N];
deque<int> q;
int main() {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
if (q.size() && i - k + 1 > q.front()) q.pop_front();
while (q.size() && a[q.back()] >= a[i]) q.pop_back();
q.push_back(i);
if (i >= k) cout << a[q.front()] << " ";
}
cout << endl;
q.clear();
for (int i = 1; i <= n; i++) {
if (q.size() && i - k + 1 > q.front()) q.pop_front();
while (q.size() && a[q.back()] <= a[i]) q.pop_back();
q.push_back(i);
if (i >= k) cout << a[q.front()] << " ";
}
return 0;
}

浙公网安备 33010602011771号