zoukankan      html  css  js  c++  java
  • 剑指offer---滑动窗口的最大值

    题目:滑动窗口的最大值

    要求:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。具体见下例:


    例如,数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};

    6个滑动窗口如下:

    {[2,3,4],2,6,2,5,1},最大值 4

    {2,[3,4,2],6,2,5,1},最大值 4

    {2,3,[4,2,6],2,5,1},最大值 6

    {2,3,4,[2,6,2],5,1},最大值 6

    {2,3,4,2,[6,2,5],1},最大值 6

    {2,3,4,2,6,[2,5,1]},最大值 5


    class Solution {
    public:
        vector<int> maxInWindows(const vector<int>& num, unsigned int size)
        {
            
        }
    };

    解题代码:

    class Solution {
    public:
        vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
            // 处理边界情况
            vector<int> res;
            if(size == 0 || size > num.size())
                return res;
            if(size == 1)
                return num;
    
            deque<int> window;
            // 为了后续使用,window存储下标
            for(unsigned int i = 0; i < size; i++){
                while(!window.empty() && num[i] >= num[window.back()])
                    window.pop_back();
                window.push_back(i);
            } // 完成初次装载
            res.push_back(num[window.front()]);
    
            // 从下标为size处继续执行
            for(unsigned int i = size; i < num.size(); i++){
                // 检查window里面的元素是否滑出窗口
                if(!(window.front() >= i-size+1 && window.front() <= i))
                    window.pop_front();
                // 执行比较与替换
                while(!window.empty() && num[i] >= num[window.back()])
                    window.pop_back();
                window.push_back(i);
                res.push_back(num[window.front()]);
            }
            return res;
        }
    };
  • 相关阅读:
    int ,long , long long类型的范围
    距离统计 CH Round #49
    A1087. 高精度加法
    NOIP2010 提高组 机器翻译
    maven学习笔记
    logback学习资料
    UTF8带BOM和不带BOM(转载)
    java IO存在问题
    01——java IO流
    C++网络爬虫设计与分析
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9963497.html
Copyright © 2011-2022 走看看