码迷,mamicode.com
首页 > 其他好文 > 详细

【队列】滑动窗口的最大值

时间:2017-09-13 10:47:45      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:width   space   class   队列   names   bsp   span   include   code   

题目:

题解:

实际上一个滑动窗口可以看成是一个队列,先进先出。

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

 

【队列】滑动窗口的最大值

标签:width   space   class   队列   names   bsp   span   include   code   

原文地址:http://www.cnblogs.com/Atanisi/p/7513711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!