( 栈和队列) 225. 用队列实现栈 ——【Leetcode每日一题】

❓225. 用队列实现栈

难度:简单

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppopempty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false

注意:

  • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsizeis empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
[“MyStack”, “push”, “push”, “top”, “pop”, “empty”]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]

解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

提示:

  • 1 <= x <= 9
  • 最多调用100 次 pushpoptopempty
  • 每次调用 poptop 都保证栈不为空

进阶:你能否仅用一个队列来实现栈。

💡思路:

在将一个元素 x 插入队列时,为了维护原来的后进先出顺序,需要让 x 插入队列首部。

而队列的默认插入顺序是队列尾部,因此在将 x 插入队列尾部之后,需要让除了 x 之外的所有元素出队列,再入队列。

🍁代码:(Java、C++)

Java

class MyStack {
    private Queue<Integer> que;

    public MyStack() {
        que = new LinkedList<>();
    }
    
    public void push(int x) {
        int len = que.size();
        que.add(x);
        for(int i = 0; i < len; i++){
            que.add(que.poll());
        }
    }
    
    public int pop() {
        return que.remove();
    }
    
    public int top() {
        return que.peek();
    }
    
    public boolean empty() {
        return que.isEmpty();
    }
}

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

C++

class MyStack {
private:
    queue<int> que;
public:
    MyStack() {
    }
    
    void push(int x) {
        int len  = que.size();
        que.push(x);
        for(int i = 0; i < len; i++){
            que.push(que.front());
            que.pop();
        }
    }
    
    int pop() {
        int x = que.front();
        que.pop();
        return x;
    }
    
    int top() {
        return que.front();
    }
    
    bool empty() {
        return que.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2),入栈操作 O ( n ) O(n) O(n),其余操作都是 O ( 1 ) O(1) O(1),其中 n 是栈内的元素个数。每次入栈操作需要将队列中的 n 个元素出队,并入队 n + 1 个元素到队列,共有 2n+1次操作,每次出队和入队操作的时间复杂度都是 O ( 1 ) O(1) O(1),且最多要入栈n次因此入栈操作的时间复杂度是 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度 O ( n ) O(n) O(n),其中 n 是栈内的元素个数。需要使用一个队列存储栈内的元素。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shiro

1 什么是Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的 API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 1.2 与Spring Security的对比 Shiro&#xff1a; Shi…

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&…

ubuntu22.04安装ROS2

ubuntu22.04安装ROS2 0.前言一、安装ROS21.首先将本地的编码格式修改为utf-82.添加ROS2 GPG key3.安装ROS24.设置环境变量 二、简单测试1.Hello ROS&#xff01;2.ROS Turtle 三、总结 0.前言 最近也没找到什么特别感兴趣的小项目&#xff0c;不过偶然间看见ROS2这个东西&#…

0703齐次方程-微分方程

文章目录 1 定义和解法1.1 定义1.2 微分方程中的变量替换1.3 齐次方程的解法 2 例题结语 1 定义和解法 1.1 定义 形式上可化为 d y d x g ( y x ) \frac{dy}{dx}g(\frac{y}{x}) dxdy​g(xy​)的方程&#xff0c;称为齐次方程。 例如 d y d x y x tan ⁡ y x , d y d x e y…

股票期货模拟交易有用吗?股票期货模拟交易心得

股票期货市场为了满足新用户的需求&#xff0c;有专门的股票期货模拟交易平台&#xff0c;大家可以在这个平台上进行股票期货的模拟交易&#xff0c;这样可以通过不断总结&#xff0c;丰富我们的知识。下面整理的股票期货模拟交易实验心得&#xff0c;从股票期货模拟交易与实盘…

linux jstat 简介

本文目录一览&#xff1a; 1、Linux使用jstat命令查看jvm的GC情况2、linux怎么监控 jvm内存 jstat3、Linux系统监控要用到哪些命令4、linux上如何安装jstatd服务 Linux使用jstat命令查看jvm的GC情况 Linux 使用jstat命令查看jvm的GC情况 命令格式 jstat命令命令格式&#…

复现永恒之蓝[MS17_010]

目录 准备靶机 测试ping连通性 攻击漏洞 利用漏洞 准备靶机 1台kali&#xff0c;1台win7 win7系统可以在MSDN镜像网站里获取 注:将win7安装好&#xff0c;win7无法安装vmtools&#xff0c;若升级系统&#xff0c;可能会把永恒之蓝补丁打上&#xff0c;所以建议别升级系统 测试…

【SpringCloud常见面试题】

SpringCloud常见面试题 1.微服务篇1.1.SpringCloud常见组件有哪些&#xff1f;1.2.Nacos的服务注册表结构是怎样的&#xff1f;1.3.Nacos如何支撑阿里内部数十万服务注册压力&#xff1f;1.4.Nacos如何避免并发读写冲突问题&#xff1f;1.5.Nacos与Eureka的区别有哪些&#xff…

毕业设计 医学图像阅读器 DICOM CT MRI 阅读器 三维重建 可视化编程技术及应用

一、 概述 此系统实现了常见 VTK 四视图&#xff0c;实现了很好的 DICOM 图像显示&#xff0c;可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素&#xff0c;距离测量&#xff0c;角度测量&#xff0c;提供源码&#xff1b; 并且通过三维重建实现可视化。使用…

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

**MySQL关联查询七种方式详解与应用实例**,你的掌握了吗

当我们需要从多个表中查询数据时&#xff0c;就需要使用关联查询了。MySQL支持七种不同类型的关联查询&#xff1a;内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。本文将讲解这七种关联查询的SQL语句、示例以及应用场景。 一、 前言 关联查询是数据库操作中…

基于html+css的图展示42

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

5.2.1二叉树的定义和基本术语

二叉树的基本概念&#xff1a; 二叉树是递归定义的二叉树 下面我们来看几个特殊的二叉树&#xff1a; 特点&#xff1a; 1&#xff09;只有最后一层有叶子节点 2&#xff09;不存在度为1的结点 3&#xff09;按层序从1开始编号&#xff0c;结点i的左孩子为2i&#xff0c;右孩…

基于趋动云的chatGLM-6B模型的部署

首先根据官方示例教程&#xff0c;学会怎么创建项目&#xff0c;怎么使用数据&#xff0c;怎么进入开发环境&#xff0c;以及了解最重要的2个环境变量&#xff1a; 这个是进入开发环境以后的代码目录 $GEMINI_CODE 这个是引用数据集后&#xff0c;数据集存放的路径 $GEMINI_DA…

第十一章_SpringBoot集成Redis

总体概述 redisTemplate-jedis-lettuce-redission之间的的联系 1、redisTemplate是基于某个具体实现的再封装&#xff0c;比如说springBoot1.x时&#xff0c;具体实现是jedis&#xff1b;而到了springBoot2.x时&#xff0c;具体实现变成了lettuce。封装的好处就是隐藏了具体的…

【难学易用c++ 之 继承】

目录&#xff1a; 前言一、继承的概念及定义&#xff08;一&#xff09;概念&#xff08;二&#xff09;继承定义继承关系和访问限定符继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…

WinScope实现录制视频与是Timeline时间轴同步设置方法-千里马framework车载手机系统开发实战

hi&#xff0c;粉丝朋友们&#xff01; 背景&#xff1a; 今天来分享一个粉丝朋友提出的问题&#xff0c;那就是他在学习wms课程时候有用到winscope工具&#xff0c;提出一个疑问&#xff0c;就是google官网说的有录屏可以结合起来一起看。具体如下&#xff1a; 其实这个以…

小案例CSS

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthde…

什么是LVS

&#x1f618;作者简介&#xff1a;一名99年运维岗位员工。&#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。&#x1f64f;创作不易&#xff0c;动动…

零售新时代,零售行业数字化破局的新路径

深夜11点&#xff0c;门店店长小张还在加班&#xff0c;因为小张还需要盘点今日销售额、库存等信息&#xff0c;这些整理好的数据需要手动录入至总公司的系统中。 多门店的零售行业中&#xff0c;这是他们每天的工作日常&#xff1a;门店先通过excel做手工报表&#xff0c;再把…