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

双端队列实战 实现滑动窗口 用LinkedList的基类双端队列Deque实现 洛谷[P1886]

集合 关系 介绍

Deque 是一个接口

LinkedList 是这个接口的实现类

题目

输入输出

滑动窗口

基于双端队列实现

Deque<Integer> deque = new LinkedList<>();

滑动窗口代码

  public static List<Integer> maxSlidingWindow(int[] nums, int k) {
        List<Integer> result = new ArrayList<>();
        Deque<Integer> deque = new LinkedList<>();
        
        for (int i = 0; i < nums.length; i++) {
            // 移除不在当前窗口的元素
            if (!deque.isEmpty() && deque.peekFirst() < i - k + 1) {
                deque.pollFirst();
            }

            // 移除队列中比当前元素小的元素,因为它们不可能成为最大值
            while (!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) {
                deque.pollLast();
            }

            // 将当前元素的索引加入队列
            deque.offerLast(i);

            // 窗口已满,记录当前窗口的最大值
            if (i >= k - 1) {
                result.add(nums[deque.peekFirst()]);
            }
        }
        
        return result;
    }

    // 求每个窗口的最小值
    public static List<Integer> minSlidingWindow(int[] nums, int k) {
        List<Integer> result = new ArrayList<>();
        Deque<Integer> deque = new LinkedList<>();
        
        for (int i = 0; i < nums.length; i++) {
            // 移除不在当前窗口的元素
            if (!deque.isEmpty() && deque.peekFirst() < i - k + 1) {
                deque.pollFirst();
            }

            // 移除队列中比当前元素大的元素,因为它们不可能成为最小值
            while (!deque.isEmpty() && nums[deque.peekLast()] >= nums[i]) {
                deque.pollLast();
            }

            // 将当前元素的索引加入队列
            deque.offerLast(i);

            // 窗口已满,记录当前窗口的最小值
            if (i >= k - 1) {
                result.add(nums[deque.peekFirst()]);
            }
        }
        
        return result;
    }
   

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

相关文章:

  • 使用jupyter notebook没有正常打开浏览器的几种情况解决
  • 传统摄像头普通形态的系统连接方式
  • 遗传算法 (Genetic Algorithm) 算法详解及案例分析
  • Java SpringBoot + Vue + Uniapp 集成JustAuth 最快实现多端三方登录!(QQ登录、微信登录、支付宝登录……)
  • C#与Vue2上传下载Excel文件
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证5)
  • 金融项目实战 05|Python实现接口自动化——登录接口
  • VMWARE linux LVM 扩容磁盘分区
  • lqb.key按键全套
  • 如果 iPhone 丢失或被盗,如何远程擦除 iPhone?
  • .NET 内存管理释放的两种方式
  • 力扣经典练习题之70.爬楼梯
  • 类型安全与代码复用的C# 泛型
  • Hypium UIViewer 让 MacOS 与鸿蒙NEXT手机实现多屏协同
  • 硬件设计-齐纳管
  • ESXi 切换硬盘直通后无法恢复的解决办法
  • Git文件夹提交错了,怎么撤销?
  • R语言的数据库交互
  • 回归预测 | MATLAB实MLR多元线性回归多输入单输出回归预测
  • Windows图形界面(GUI)-QT-C/C++ - QT信号与槽机制详解
  • Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
  • C51交通控制系统的设计与实现
  • 算法3(力扣83)-删除链表中的重复元素
  • 金融数据下载
  • 启动项目报JVM初始化错误
  • United States of America三种表示