zoukankan      html  css  js  c++  java
  • 代码题(62)— 滑动窗口最大值

    1、滑动窗口的最大值

    /*
    * 面试题65:滑动窗口的最大值
    * 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
    * 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,
    * 他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:
    * {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1},
    * {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
    */

    class Solution {
    public:
        vector<int> maxInWindows(const vector<int>& num, unsigned int size)
        {
            vector<int> result;
            if(size < 1 || size > num.size())
                return result;
            deque<int> index;
            for(unsigned int i=0;i<size;i++)
            {
                while(!index.empty() && num[i] >= num[index.back()])
                    index.pop_back();
                index.push_back(i);
            }
            for(unsigned int i=size;i<num.size();i++)
            {
                result.push_back(num[index.front()]);
                while(!index.empty() && num[i] >= num[index.back()])
                    index.pop_back();
                if(!index.empty() && index.front() <= (int)(i-size))
                    index.pop_front();
                index.push_back(i);
            }
            result.push_back(num[index.front()]);
            return result;
            
        }
    };
  • 相关阅读:
    STL_算法_05_集合算法
    STL_算法_04_算术和生成算法
    STL_算法_03_拷贝和替换算法
    STL_算法_02_排序算法
    STL_算法_01_查找算法
    STL_容器使用时机
    STL_容器共通能力
    Qt5_选择文件对话框
    Qt5_当前exe所在路径
    Java 静态代理和动态代理
  • 原文地址:https://www.cnblogs.com/eilearn/p/9673497.html
Copyright © 2011-2022 走看看