【LeetCode232】用栈实现队列

news/2024/10/22 21:38:07/

题目:

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

        void push(int x) 将元素 x 推到队列的末尾
        int pop() 从队列的开头移除并返回元素
        int peek() 返回队列开头的元素
        boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:

        你只能使用标准的栈操作:也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
        你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。 

 答案:

        新建两个栈s1,s2,其中s1是真正的放元素的栈,s2是辅助操作

        因为队列是先进先出,所以要保证s1里每次新增元素时,把它放到最底下,原来的在上面,这样就能保证先进先出.

        具体方案:

        对于入队:把新元素放进s1之前,先一次把s1里面原来的元素挪到s2里暂存一下,也就是第一个循环干的事情.然后放入新元素.然后再把s2里面的挪回来.

        每次新增元素都这么干,就意味着后放入的元素在最底下.先放的元素在上面.

        对于查看队首元素,也就是看s1栈顶是啥元素,直接调用s1.peek()即可

        对于出队,就是弹出s1栈顶元素,直接调用s1.pop()

class MyQueue {private Stack<Integer> s1 = new Stack<>();private Stack<Integer> s2 = new Stack<>();public MyQueue() {}public void push(int x) {while(!s1.isEmpty()){s2.push(s1.pop());}s1.push(x);while(!s2.isEmpty()){s1.push(s2.pop());}}public int pop() {return s1.pop();}public int peek() {return s1.peek();}public boolean empty() {return s1.isEmpty();}
}


http://www.ppmy.cn/news/57468.html

相关文章

求n个斐波拉契数列的和

题目描述 求斐波拉契数的公式为&#xff1a;f(n)f(n−1)f(n−2)&#xff0c;当n为0时&#xff0c;f(0)为0&#xff0c;当n为1时&#xff0c;f(1)为1。输入一个非负整数n&#xff0c;求出前n个斐波拉契数的和。 输入输出格式 输入格式 第一行有一个非负整数n。 输出格式 一行…

状态机模式

状态模式 状态模式定义:使用场景角色定义1. State一抽象状态角色2. ConcreteState一-具体状态角色3. Context--环境角色 需求背景1. 订单状态抽象类2. 定义订单具体状态类并集成基类&#xff08;抽象类&#xff09;2.1 订单创建状态2.2 订单已支付状态2.3 订单已发货状态2.4 订…

9.Java中异常处理机制是什么

Java的异常处理通过五个关键字来实现&#xff0c;分别是捕获异常&#xff1a;try&#xff0c;catchsfinally&#xff1b;声明异常&#xff1a;throws&#xff1b;抛出异常&#xff1a;throw 一&#xff1a;try&#xff0c;catch捕获异常二&#xff1a;finally回收资源三&#x…

青少年软件编程(C语言) 等级考试试卷(五级)2021年12月

青少年软件编程&#xff08;C语言&#xff09; 等级考试试卷&#xff08;五级&#xff09;2021年12月1.书架 题目描述 John最近买了一个书架用来存放奶牛养殖书籍&#xff0c;但书架很快被存满了&#xff0c;只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000)&#xff0c;…

746. 使用最小花费爬楼梯

给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例 1&#xff…

【LeetCode】236. 二叉树的最近公共祖先

1.问题 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是…

Linux驱动之input输入子系统

输入子系统用于实现Linux系统输入设备&#xff08;鼠标 键盘 触摸屏 游戏杆&#xff09;驱动的一种框架。Linux内核将其中的固定部分放入内核&#xff0c;驱动开发时只需要实现其中的不固定部分&#xff08;主要还是和硬件相关的部分&#xff09;&#xff0c;这和platform设备…

【五一创作】人工智能前沿知识

人工智能是一种在计算机系统中模拟人类智能和思维的技术。近年来&#xff0c;人工智能技术得到了飞速发展&#xff0c;涉及到了各个领域&#xff0c;如自然语言处理、计算机视觉、智能机器人等。在这篇文章中&#xff0c;我将介绍人工智能的前沿知识。 一、深度学习 深度学习…