LeetCode.232. 用栈实现队列

news2024/9/23 9:27:10

题目

232. 用栈实现队列

分析

先了解一下栈和队列的特点:

  • 栈:先进后出
  • 队列:先进先出

想用栈实现队列的特点,就需要使用两个栈。因为两个栈就可以将列表倒序。
假设第一个栈 s1 = [1,2,3],第二个栈 s2 = [] 。若循环执行 s1元素出栈并且添加到栈 s2直到栈 s1为空,则s1 = []s2 = [3,2,1],即栈s2元素为栈s1元素倒序。

最终方法:

  1. 加入元素的时候,只往栈s1里面加入。
  2. 弹出元素的时候,先弹出栈s2里面的元素,如果s2为空,则把s1里面的元素放入s2,然后弹出s2的元素。
  3. 判断是否为空,s1s2同时为空,才为空

代码

class MyQueue {

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

/**
 * 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();
 */

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外卖点餐多门店商家积分商城小程序开发

开源版的点餐外卖多门店多商家积分商城小程序是一款集合了多种功能于一身的移动应用。以下是该小程序的核心功能概述&#xff1a; 点餐与外卖服务&#xff1a;用户能够轻松浏览不同门店的菜单&#xff0c;根据个人口味和需求挑选菜品、口味和规格&#xff0c;并将其加入购物车…

高通QNX基线编译原理

下面代码以高通智驾平台为例。 1 QNX应用程序编译原理 在高通提供的qnx开发包中,qnx的内核已经由qnx所提供,所以qnx的编译,其实就是大量应用程序的编译,以及最后利用buildfile文件,把内核,库文件以及应用程序打包在一起的过程。 1.1 qnx的工程目录 应用程序的编译,可…

AirPods Pro 2 耳机推送新固件,苹果Find My功能助力产品成长

苹果公司面向 AirPods Pro 2&#xff08;包括 USB-C 和 Lightning 版本&#xff09;&#xff0c;推出了全新的测试版固件更新&#xff0c;版本号为 6E188&#xff0c;高于 12 月份发布的 6B34 固件。 苹果和往常一样&#xff0c;并没有提供详细的更新日志或者说明&#xff0c…

mirthConnect忽略HTTPS SSL验证

mirthConnect SSL忽略验证 1、下载https网站证书 点击不安全---->证书无效 2、查看mirth 秘钥库口令 在mirthConnect 的conf目录下面keystore.storepass 3、导入证书到本地 在jdk的bin目录下面执行 keytool -importcert -file "下载的网站证书路径" -keysto…

MyBatisPlus(SpringBoot版)的分页插件

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖&#xff0c;改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP&#xff08;mybatisplus&#xff09;的分页插件 二、使…

高维中介数据: 联合显着性(JS)检验法

摘要 中介分析在流行病学和临床试验中越来越受到关注。在现有的中介分析方法中&#xff0c;流行的联合显着性&#xff08;JS&#xff09;检验会产生过于保守的 I 类错误率&#xff0c;因此功效较低。但是&#xff0c;如果在使用 JS 测试高维中介假设时&#xff0c;可以准确控制…

一站式电商数据采集API接口-支持多平台采集-全面提升数据采集效率!

电商数据采集API接口包含&#xff1a;淘宝采集&#xff0c;天猫采集&#xff0c;拼多多采集&#xff0c;同行店采集&#xff0c;蓝海店铺采集&#xff0c;批量整店采集&#xff0c;蓝海监控上新&#xff0c;首销尾销&#xff0c;潜力款选品&#xff0c;上新品采集&#xff0c;高…

RNA-Seq 笔记 [4]

***********************该笔记为初学者笔记&#xff0c;仅供个人参考谨慎搬运代码****************************** samtools 排序压缩和 featureCounts 生成基因计数表 SAM文件和BAM文件 1.SAM格式&#xff1a;是一种通用的比对格式&#xff0c;用来存储reads到参考序列的比…

【蓝牙协议栈】【BR/EDR】【AVDTP】音视频分布传输协议

1. AVDTP概念 AVDTP即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL&#xff08;音视频分配传输协议&#xff09;&#xff0c;主要负责 A/V stream的协商、建立及传输程序&#xff0c;还指定了设备之前传输A/V stream的消息格式. AVDTP的传输机制和消息格式是以 RTP为基础的。…

Redis 之三:Redis 的发布订阅(pub/sub)

概念介绍 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff0c;它允许客户端之间进行异步的消息传递 Redis 客户端可以订阅任意数量的频道。 模型中的角色 在该模型中&#xff0c;有三种角色&#xff1a; 发布者&#xff08;Publisher&#xff09;&#xff1a;负责发送信…

vue2 element 实现表格点击详情,返回时保留查询参数

先直观一点&#xff0c;上图 列表共5条数据&#xff0c;准备输入Author过滤条件进行查询 进入查看详情页&#xff0c;就随便搞了个按钮 啥都没调啦 点击返回后 一开始准备用vuex做这个功能&#xff0c;后来放弃了&#xff0c;想到直接用路由去做可能也不错。有时间再整一套…

【VTKExamples::PolyData】第四十四期 ProcurstesAlignmentFilter

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例ProcurstesAlignmentFilter,并解析接口vtkProcurstesAlignmentFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^…

jupyter 一键快捷启动方法研究

1.效果 首先打开dat 文件&#xff0c;同意赋予管理员 输入序号1 成功启动 2.Bat代码 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&e…

mac使用sequl的报错说明

出现下图错误&#xff0c;则到此地址下载test-builds版本 Test Builds 使用 sequel pro 的时候出现了 SequelPro encountered an unexpected error 表现为&#xff1a;测试通过&#xff0c;链接就卡住报错的问题。 解决办法 这是软件的问题&#xff0c;下载使用这个 TEST…

大模型理论基础(so-large-lm)课程笔记!

Datawhale干货 作者&#xff1a;辣条&#xff0c;Datawhale优秀学习者 前 言 在当前信息时代&#xff0c;大型语言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;的发展速度和影响力日益显著。随着技术进步&#xff0c;我们见证了从基本的Transformer架构…

计算机视觉基础知识(二)---数字图像

像素 像素是分辨率的单位;构成位图图像的最基本单元;每个像素都有自己的颜色; 图像分辨率 单位英寸内的像素点数;单位为PPI(Pixels Per Inch),为像素每英寸;PPI表示每英寸对角线上所拥有的像素数目:,x:长度像素数目,y:宽度像素数目,Z:屏幕大小;屏幕尺寸(大小)指的是对角线长…

程序媛的mac修炼手册-- Node.js入门篇

最近因为参与一个微信小程序的开发&#xff0c;开始摸索JavaScript。期间&#xff0c;需要基于Node.js安装微信开发工具的依赖项&#xff0c;所以又顺带学习了Node.js的包管理工具npm&#xff08;Node Package Manager&#xff09;。不过&#xff0c;之前看到国外的全栈大佬​​…

electron+vue3全家桶+vite项目搭建【29】封装窗口工具类【3】控制窗口定向移动

文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章&#xff1a; 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组&#xff0c;维护窗口关系 很多时候&#xff0c;我们想直接让某个窗口移动到边角&#xff0c…

MySQL之索引详解

华子目录 索引概述优缺点 索引的原理索引的设计原则索引结构B-tree&#xff08;多路平衡查找树&#xff09;BtreeHash 为什么InnoDB存储引擎选择Btree&#xff1f;索引分类聚集索引选取规则 单列索引和多列索引前缀索引创建索引1.创建表时创建索引2.在已经存在的表上创建索引3.…

funasr VAD语音端点检测;sherpa VAD+STT识别

1、VAD 语音端点检测(funasr) Voice Activity Detection 语音活性检测(VAD)也被称为语音端点检测,基本原理是判断一个区间内的音频(区间被称为一个“语音帧”),是有效语音,还是无效语音。通过连续的检测多帧,就能判断出语音的“开头”(从无效到有效)和“结尾”(从…