zoukankan      html  css  js  c++  java
  • 【Offer】[59-2] 【队列的最大值】

    题目描述

      请定义一个队列并实现函数max得到队列里的最大值,要求函数max、push_back和 pop_front 的时间复杂度都是0(1)。

    [牛客网刷题地址]无

    思路分析

    1. 利用一个双端队列来存储当前队列里的最大值以及之后可能的最大值。
    2. 在定义题目要求功能的队列时,除了定义一个队列data存储数值,还需额外用一个队列maxmium存储可能的最大值;此外,还要定义一个数据结构,用于存放数据以及当前的index值,用于删除操作时确定是否删除maxmium中最大值。

    测试用例

      往队列末尾插入不同大小的数字并求最大值;从队列头部删除数字并求最大值。

    Java代码

    public class Offer059_02 {
        public static void main(String[] args) {
            test1();
            test2();
            test3();
    
        }
    
        private ArrayDeque<InternalData> data = new ArrayDeque<InternalData>();
        private ArrayDeque<InternalData> maximum = new ArrayDeque<InternalData>();
    
        private class InternalData {
            int number;
            int index;
    
            public InternalData(int number, int index) {
                this.number = number;
                this.index = index;
            }
        }
    
        private int curIndex;
    
        public void push_back(int number) {
            InternalData curData = new InternalData(number, curIndex);
            data.addLast(curData);
    
            while (!maximum.isEmpty() && maximum.getLast().number < number)
                maximum.removeLast();
            maximum.addLast(curData);
    
            curIndex++; 
        }
    
        public void pop_front() {
            if (data.isEmpty()) {
                System.out.println("队列为空,无法删除!");
                return;
            }
            InternalData curData = data.removeFirst();
            if (curData.index == maximum.getFirst().index)
                maximum.removeFirst();
        }
    
        public int max() {
            if (maximum == null) {
                System.out.println("队列为空,无法删除!");
                return 0;
            }
            return maximum.getFirst().number;
        }
    
        private static void test1() {
    
        }
    
        private static void test2() {
    
        }
        private static void test3() {
        }
    }
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    数据结构与算法10 微服务接口的鉴权和限流 [MD]
    .Net开发环境配置[OS/IIS/VS...]
    一、单件模式
    正则表达式调试器1.1
    C#2.0新特性系列文章转载
    巧用VS2005解决VS2005网站发布不便问题
    配置VS2005,加速VS2005运行速度
    转载:ASP.NET运行机制 和 图片盗链问题
    ASP.NET页面提前处理问题
    关于NTLM认证的python和.NET实现
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer592-dui-lie-de-zui-da-zhi.html
Copyright © 2011-2022 走看看