队列滑动窗口的最大值

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;
}

 

以上是关于队列滑动窗口的最大值的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer(栈和队列)-滑动窗口的最大值

leetcode 239. 滑动窗口最大值(单调队列)

剑指offer:滑动窗口的最大值(栈和队列)

剑指offer59队列的最大值(不熟)

队列滑动窗口的最大值

队列,帮我搞一下这个滑动窗口最大值。