队列滑动窗口的最大值
Posted Vincent丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了队列滑动窗口的最大值相关的知识,希望对你有一定的参考价值。
题目:
题解:
实际上一个滑动窗口可以看成是一个队列,先进先出。
Solution 1
#include <iostream> #include <deque> #include <vector> using namespace std; vector<int> windowMaxOfArray(vector<int> &nums, int width) { vector<int> maxInWidows; deque<int> q; int n = nums.size(); if (n >= width && n > 0) { for (int i = 0; i < width; ++i) { while (!q.empty() && nums[i] >= nums[q.back()]) q.pop_back(); q.push_back(i); } for (int i = width; i < n; ++i) { maxInWidows.push_back(nums[q.front()]); while (!q.empty() && nums[i] >= nums[q.back()]) q.pop_back(); if (!q.empty() && (i - q.front()) >= width) q.pop_front(); q.push_back(i); } maxInWidows.push_back(nums[q.front()]); } return maxInWidows; } int main() { int n, width; cin >> n; cin >> width; vector<int> nums(n, 0); for (int i = 0; i < n; ++i) { cin >> nums[i]; } vector<int> res = windowMaxOfArray(nums, width); for (auto num : res) { cout << num << " "; } cout << endl; system("pause"); return 0; }
以上是关于队列滑动窗口的最大值的主要内容,如果未能解决你的问题,请参考以下文章