首页 > 其他分享 >1201-用栈实现最小队列

1201-用栈实现最小队列

时间:2024-12-01 13:54:39浏览次数:6  
标签:peek 队列 1201 pop int 用栈 push empty

最小栈 leetcode 232.

题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty
解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要判定三个情况,b队列有值那就是b队列的peek值,否则判断a队列是否有值,都没有就是空的,最后就是将a队列的值pop出来push进b队列实现倒序存储,empty方法就是两个队列均为空,pop的话,首先执行一下peek函数,作为最终返回值,在这中间需要将b队列执行一下pop操作。
题解及注释:

class MyQueue {
    private Stack<Integer> a;
    private Stack<Integer> b;
    

    public MyQueue() {
        a = new Stack<Integer>();
        b = new Stack<Integer>();
    }
    
    public void push(int x) {
        a.push(x);
    }
    
    public int pop() {
        int peek = peek();
        b.pop();
        return peek;
    }
    
    public int peek() {
        if (!b.empty()) return b.peek();
        if (a.empty()) return -1;
        while (!a.empty()) {
            b.push(a.pop());
        }
        return b.peek();
    }
    
    public boolean empty() {
        return a.empty() && b.empty();
    }
}

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */

总结:题解写出来后其实基本上都已经熟悉了,为什么pop的时候不直接返回b.pop(),因为特殊情况只是在peek()做了处理,但是返回值是存放在pop()中的peek值里的,所以最终要返回该peek值

标签:peek,队列,1201,pop,int,用栈,push,empty
From: https://www.cnblogs.com/hgao/p/18579749

相关文章

  • 20241201每日一题洛谷P1683
    普及-每日一题洛谷P1683题目描述不是任何人都可以进入桃花岛的,黄药师最讨厌像郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有喷出要命的毒气,那你就死翘翘了,我们认为......
  • 单调队列
    单调队列的定义顾名思义,单调队列就是队内元素具有单调性的队列。根据需要我们可以直接从队头取出队列中的最大值或最小值,并且剩下的元素仍然具有单调性。通过一个经典题目来了解单调队列滑动窗口-AcWing题库给定一个大小为n≤106的数组。有一个大小为k的滑动窗口,它从数组......
  • Windows系统使用安装ActiveMQ消息队列手把手保姆级教程踩坑实录
    文章目录一、什么是ActiveMQ1.概述2.架构3.应用场景二、下载ActiveMQ三、解压四、配置环境变量五、启动ActiveMQ六、验证安装和服务七、停止ActiveMQ八、注意事项一、什么是ActiveMQ1.概述ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范(JavaMessage......
  • RabblitMQ 消息队列组件与 libev事件驱动库
    概述RabbitMQ是一个广泛使用的开源消息队列系统,它基于AMQP(高级消息队列协议)。RabbitMQ用于在分布式系统中传递消息,确保消息可靠传递并提供弹性。libev是一个事件驱动的库,用于高效地处理异步事件,常用于网络编程或需要高并发处理的应用。将RabbitMQ与libev结合使用,可以......
  • 【消息队列】RabbitMq-交换机模型
    RabbitMQ交换机模型Fanoutexchange广播形式消息会以广播形式发送给每个绑定该exchange的队列中。Directexchange定向路由在控制台新建了一个exchange,type指定为directTopicexchange以.来分割多个单词,并用通配符来指定routingkey。#:表示0个过多个字母*:表示1个字母......
  • 数据结构——栈和队列
    ......
  • 栈和队列(数据结构)
    一.栈1.1概念与结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(LastInFirstOut)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。......
  • 深入理解 FreeRTOS 队列集(建议收藏!!!)
    在FreeRTOS操作系统这个“大家庭”里,队列集扮演着一个特殊的“管家”角色,它让多个队列之间的协作变得井井有条。一、队列集的基本概念队列集就像是一个专门用来存放其他队列“钥匙”(句柄)的盒子。假设我们有队列A这个“小仓库”,它能存放LengthA数量的“宝贝”(数......
  • 代码随想录第十一天|栈与队列part02--150.逆波兰表达式求值、239.滑动窗口最大值、347
    150.逆波兰表达式求值(150.逆波兰表达式求值)题目分析:计算逆波兰表达式(后缀表达式:左右中)的值,算符仅包含四则运算,操作数为一个整数或另一个表达式,整数除法向零截断(向下取整),无除零运算,答案及中间结果不超过32位,即使用整型int即可。解题重点:后缀表达式的每一个表达式中:读入1个算......
  • 【计算机科学】深入理解队列:有序的数据之道
    在编程世界中,数据结构是解决问题的核心工具,而队列则是其中的基础模块之一。无论是任务调度、缓存系统还是算法设计,队列的先进先出(FIFO)特性使其成为高效解决问题的利器。本篇文章将从零开始,带你理解队列的概念、实现思路、典型应用及其背后的逻辑。本篇文章需要读者具有链......