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;
        }
    };
  • 相关阅读:
    正则表达式语法学习
    微软开放WP开发者回复用户应用评论功能
    下载安全程序需谨慎 黑客盯上XP用户
    软件业进入由大变强关键期
    54%的恶意程序无法被检测出
    CSS:第1课
    Javascript疑问【长期更新】
    不同语言的注释【长期更新】
    定制博客CSS样式
    认识Html DOM
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9963497.html
Copyright © 2011-2022 走看看