给定一个整数数组 nums 和一个整数 k,请找出所有长度为 k 的滑动窗口中的最大值。
输入描述
第一行输入一个整数 n,表示数组长度。
第二行输入 n 个整数,表示数组 nums。
第三行输入一个整数 k。
输出描述
输出每个滑动窗口的最大值,用空格分隔。
示例 1
输入
text
8
1 3 -1 -3 5 3 6 7
3
输出
text
3 3 5 5 6 7
C++ 解法
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) cin >> nums[i];
int k;
cin >> k;
deque<int> dq;
vector<int> ans;
for (int i = 0; i < n; i++) {
while (!dq.empty() && dq.front() <= i - k) dq.pop_front();
while (!dq.empty() && nums[dq.back()] <= nums[i]) dq.pop_back();
dq.push_back(i);
if (i >= k - 1) ans.push_back(nums[dq.front()]);
}
for (int i = 0; i < (int)ans.size(); i++) {
if (i) cout << " ";
cout << ans[i];
}
cout << endl;
return 0;
}