生成滑动窗口的最大值数组

#include <iostream>
#include <vector>
#include <deque>
using namespace std;

vector<int>&  getMax(vector<int>& arr, int w)
{
        vector<int> res;
    if(arr.size() == 0 || w < 1 || arr.size() < w)
    {
        return res;
    }
    deque<int> qmax;
    for(int i = 0; i < arr.size(); ++i)
    {
        while(!qmax.empty() && arr[qmax.back()] <= arr[i])
            qmax.pop_back();
        qmax.push_back(i);
        if(qmax.front() == i - w)
            qmax.pop_front();
        if(i >= w - 1)
        res.push_back(arr[qmax.front()]);
    }
    return res;
}
int main()
{
    vector<int> orignal;
    orignal.push_back(4);
    orignal.push_back(3);
    orignal.push_back(5);
    orignal.push_back(4);
    orignal.push_back(3);
    orignal.push_back(3);
    orignal.push_back(6);
    orignal.push_back(7);

    vector<int> res;
    res = getMax(orignal, 3);
    for(int i = 0; i < res.size(); ++i)
         cout << res[i] << endl;

}

猜你喜欢

转载自blog.csdn.net/wzc2608/article/details/80613021