首页 > 其他 > 详细

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

时间:2017-09-13 10:41:00      阅读:281      评论:0      收藏:0      [点我收藏+]

题目:

题解:

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

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

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!