剑指offer计划27(栈与队列困难)—java

1.1、题目1

剑指 Offer 59 – I. 滑动窗口的最大值

1.2、解法

解题思路:(来自作者bigbeats)

相当于维护一个最大队列(队头元素最大,向队尾非严格递减)

在未形成窗口前,先构造完整窗口。
在形成窗口后,移动窗口:

判断即将失去的这个左边界值是否是最大值,如果是需要从最大队列中删除这个最大值。
再让队列尾部开始与即将加入的右边界值做对比,如果队列尾部元素大于或等于这个元素,则将这个元素加入尾部,反之将尾部元素删除。

以上两步操作保证队列的顺序是非严格递减的,即队头存放最大值。且队列中元素的生命周期都在对应的窗口期内。

1.3、代码


class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums == null || k == 0) return new int[]{};
        Deque q = new LinkedList<>();

        // 形成最初的窗口
        for(int i = 0;i

2.1、题目2

剑指 Offer 59 – II. 队列的最大值

2.2、解法

这里用两个队列来解决,queue用来存放当前放置的内容,deque来存放一定数量的大数
最大值则直接取queue降序的头,push时,则将deque中小于它的数去掉,将该值添加到队列末尾。
pop时,判断deque的头是否是推出的头,是的话也将该数值推出。

2.3、代码

class MaxQueue {
    Queue q;
    Deque d;

    public MaxQueue() {
        q = new LinkedList();
        d = new LinkedList();
    }

    public int max_value() {
        if (d.isEmpty()) {
            return -1;
        }
        return d.peekFirst();
    }

    public void push_back(int value) {
        while (!d.isEmpty() && d.peekLast() < value) {
            d.pollLast();
        }
        d.offerLast(value);
        q.offer(value);
    }

    public int pop_front() {
        if (q.isEmpty()) {
            return -1;
        }
        int ans = q.poll();
        if (ans == d.peekFirst()) {
            d.pollFirst();
        }
        return ans;
    }
}

Original: https://www.cnblogs.com/cxykhaos/p/15342215.html
Author: 程序员khaos
Title: 剑指offer计划27(栈与队列困难)—java

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598458/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL注入 利用系统读、写文件

    MySQL能读写系统文件的前提 不同系统、不同的数据库版本有细微差异,以下实验在Windows10和Mysql 5.7.26下操作; 1.拥有该File的读权限 、 该目录写的权限…

    Linux 2023年6月6日
    0116
  • DML

    用来对数据库中的表的数据进行增删改 添加数据 给指定列添加数据 insert into <表名> (&#x5217;&#x540D;1, &#x…

    Linux 2023年6月7日
    098
  • ABCD四个顺序执行方法,拓展性延申

    今天在群里,有人问 &#x6709;&#x51E0;&#x4E2A;void&#x8FD4;&#x56DE;&#x503C;&amp…

    Linux 2023年6月7日
    0132
  • 新一代高性能USB转串口芯片CH342与CH343

    CH342与CH343是沁恒推出的第三代USB转串口产品,内部高度集成,外围精简,均提供VIO电源引脚,串口I/O支持独立供电。 CH342实现USB转两路高速异步串口,支持串口波…

    Linux 2023年6月7日
    0153
  • Java秒杀系统二:Service层

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月11日
    0105
  • 【Example】C++运算符重载

    首先,阅读之前要先搞清楚什么是运算符、函数重载。函数重载就是在一个范围内为一个函数声明多个实现方式,函数名必须一致。 那么C++运算符是否可以重载呢?可以!先弄清什么时候需要进行运…

    Linux 2023年6月13日
    0111
  • centos7搭建yum源

    记录三种方式:1、本地yum源(只有本服务器可有) 2、局域网yum源(同一局域网可用) 3、将网上rpm包下载到本地并将包放到局域网yum源下(解决ios软件缺乏) 一、本地yu…

    Linux 2023年6月6日
    098
  • CentOS7 安装 OpenBLAS

    将仓库clone到本地 git clone https://github.com/xianyi/OpenBLAS.git GitHub 地址:https://github.com/…

    Linux 2023年6月7日
    0154
  • Linux系统优化

    一、 系统信息查看方法 查看系统名称信息 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 查看系统内核版本…

    Linux 2023年5月27日
    0141
  • SQLI-LABS(Less-7)

    Less-7(GET-Dump into outfile-String) 打开 Less-7页面,可以看到页面中间有一句 Please input the ID as parame…

    Linux 2023年6月6日
    080
  • Pyinstaller打包教程

    由于用户使用Python脚本的时候可能没有运行环境,所以需要打包。记录下碰到的问题。 安装 pip install –upgrade pyinstaller 安装最新开发版 pi…

    Linux 2023年6月13日
    062
  • MySQL slow log 慢日志

    sql慢日志用于记录执行时间超过指定阈值的SQL,对于系统性能和故障排错非常有帮助 1.如何开启sql慢日志 –&#x5F00;&#x542F;slow log …

    Linux 2023年6月6日
    079
  • 【socket】基于socket通信-线程上报温度

    线程是一条执行路径,是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变…

    Linux 2023年6月13日
    0104
  • Ubuntu18开启默认root登录方法

    默认的Ubuntu 18.04系统在登陆界面上是不支持root用户直接登录的,但是你可以使用下面的方法让Ubuntu 18.04也支持root登录,其他类似的版本参考在Ubuntu…

    Linux 2023年6月7日
    0105
  • VS 2010 LINK fatal error LNK1123转换到 COFF 期间失败 文件无效或损坏

    1. 解决LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 VS 2010 【LINK : fatal error LNK112…

    Linux 2023年6月13日
    086
  • Java 技术栈中间件优雅停机方案设计与实现全景图

    欢迎关注公众号:bin的技术小屋,阅读公众号原文 本系列 Netty 源码解析文章基于 4.1.56.Final 版本 本文概要 在上篇文章 我为 Netty 贡献源码 | 且看 …

    Linux 2023年6月6日
    0148
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球