当前位置: 首页 > article >正文

力扣 239. 滑动窗口最大值

🔗 https://leetcode.cn/problems/sliding-window-maximum

题目

  • 给定一个数组,给定数字 k,滑动窗口的大小为 k,从数组的头往后移动
  • 返回每个窗口内的最大值

思路

  • 单调队列的经典场景
  • 用双向队列记录,队列的头是滑动窗口内的最大值的 index,该队列保证 nums[index] 降序
  • 通过判断当前 index 与队列头的 index 的间隔,判断是否在滑动窗口内,不再则 pop front,因为队列是降序的,保证了后续索引纸箱的数字,是当前滑动窗口内的最大值
  • 为了保证队列索引表示的数字是降序,判断队列尾部的数字是否比当前元素大,若不大,则 pop back,记录当前元素,从尾部入队列

代码

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> dq;
        vector<int> ans;
        for (int i = 0; i < nums.size(); i++) {
            while (!dq.empty() && i - dq.front() >= k) {
                dq.pop_front();
            } 

            while (!dq.empty() && nums[dq.back()] <= nums[i]) {
                dq.pop_back();
            }

            dq.push_back(i);

            if (i >= k-1) {
                ans.push_back(nums[dq.front()]);
            }
            
        }
        return ans;
    }
};

http://www.kler.cn/a/408511.html

相关文章:

  • JAVA实现将PDF转换成word文档
  • P1 练习卷(C++4道题)
  • 笔记记录 k8s-install
  • 镁光MT25QU01GXXX norflash调试笔记
  • 大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?
  • Wekan看板安装部署与使用介绍
  • 数字化工厂 MES试点方案全解析(三)
  • 行为树详解(2)——最简单的行为树
  • LeetCode题练习与总结:棋盘上的战舰--419
  • 【Python爬虫五十个小案例】爬取豆瓣电影Top250
  • ElasticSearch7.x入门教程之索引数据类型和映射(四)
  • 11.21 小清新图论专场训练
  • 华为FusionCube 500-8.2.0SPC100 实施部署文档
  • 项目实战:Vue3开发一个购物车
  • ComfyUI绘画|SD WebUI 与 SD ComfyUI 的区别
  • 【含文档】基于.NET的医院医保管理系统(含源码+数据库+lw)
  • 2024最新python使用yt-dlp
  • 2024大数据职业技能竞赛(国赛)模块E-工业 用折线图展示设备OP160每日的运行时长
  • 疑难Tips:NextCloud域名访问登录时卡住,显示违反内容安全策略
  • MQ重复消费与消息顺序
  • 深入理解与实践:Softmax函数在机器学习中的应用
  • LeetCode-632. Smallest Range Covering Elements from K Lists [C++][Java]
  • vue--制作购物车
  • 【2024最新】基于Springboot+Vue的智慧食堂系统Lw+PPT
  • Spring Boot应用开发深度解析与实践案例
  • 基于lora的llama2二次预训练