[力扣 Hot100]Day11 滑动窗口最大值

题目描述

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
在这里插入图片描述

出处

思路

暴力解法就是O(n*k)会超时,所以要用单调数列。维护一个单调递减的队列,队列初始元素是初始窗口内的值,随后移动窗口时维护这个单调队列。窗口滑动一次的操作分三步:
pop:如果窗口左pop掉的不是队列front,说明窗口左并不在队列中(最大值左边的所有数都不会加入队列),不用操作,如果窗口左pop掉的恰是队列front,pop掉队列的front。
push:如果窗口右push的比队列back还小,队列直接push_back,否则先pop掉队列内比待push值小的所有项再push_back,这样就可以保证队列单调。
get_result:每轮pop和push后(即窗口滑动一次的操作)队列必定非空(极端情况下队列全pop完了只push了一个最大值),此时队头即为窗口最大值。

代码

class Solution {
   
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
   
        int n = nums.size();
        deque<int> q;
        vector<int> result;
        //构建初始单调序列
        for(int i = 0; i < k; i++){
   
            while(!q.empty()&&nums[i]>q.back())
                q.pop_back();
            q.push_back(nums[i]);
        }
        result.push_back(q.front());
        for(int i = k; i < n; i++){
   
            if(!q.empty()&&nums[i-k]==q.front())//要删的是最大值
                q.pop_front();
            while(!q.empty()&&nums[i]>q.back())
                q.pop_back();
            q.push_back(nums[i]);
            result.push_back(q.front());
        }
        return result;
    }
};

相关推荐

  1. [100] 10.滑动窗口

    2024-01-25 20:38:03       33 阅读
  2. 每日一题day25[239. 滑动窗口]

    2024-01-25 20:38:03       35 阅读
  3. 239. 滑动窗口

    2024-01-25 20:38:03       23 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-25 20:38:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-25 20:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-25 20:38:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-25 20:38:03       20 阅读

热门阅读

  1. 深入剖析C语言中的神秘字符——NULL

    2024-01-25 20:38:03       37 阅读
  2. Docker容器化运行Oracle 19c数据库

    2024-01-25 20:38:03       41 阅读
  3. torchsummary库的使用

    2024-01-25 20:38:03       34 阅读
  4. 数据结构编程题:Phone List

    2024-01-25 20:38:03       38 阅读
  5. python学习笔记11(程序跳转语句、空语句)

    2024-01-25 20:38:03       43 阅读
  6. 低代码配置-小程序配置

    2024-01-25 20:38:03       41 阅读
  7. 三、安全工程—密码学(CISSP)

    2024-01-25 20:38:03       37 阅读
  8. 面试 Vue 框架八股文十问十答第十期

    2024-01-25 20:38:03       39 阅读
  9. kafka生产者与消费者

    2024-01-25 20:38:03       40 阅读
  10. Sqlite3.45在VS2015 win10编译报错

    2024-01-25 20:38:03       41 阅读
  11. CPU和GPU的工作原理及区别

    2024-01-25 20:38:03       37 阅读