当前位置: 首页 > article >正文

算法13(力扣225)-用队列实现栈

1、问题

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

            实现 MyStack 类:

            void push(int x) 将元素 x 压入栈顶。

            int pop() 移除并返回栈顶元素。

            int top() 返回栈顶元素。

            boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

2、示例

        输入:["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

3、实现思路

(1)理解题意

(2)实现思路,按照正常的数组来即可,但是需要记住队和栈的特点

4、具体步骤

(1)创建栈:定义两个队列,其中一个用来处理插入、判空,另一个用来处理返回栈顶元素操作、弹出栈顶元素的操作

(2)push操作:插入,给queue1使用push插入即可

(3)pop弹出操作:栈是先进后出,队是先进先出,将队1的第一个弹出作为队2的输入,然后队2就是队1的逆序(队1剩的最后一个元素就是栈顶元素,即需要删除的元素),然后将剩余元素按照相同的方法返回队1

(4)top返回栈顶元素:和pop相似,只是不删除栈顶元素,使用临时变量存储,然后将队1剩余的元素压入队2,然后将队2所有的元素返回给队1

(5)empty判断栈是否为空(判断队1的长度即可)

5、完整代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>用队列实现栈</title></head><body><p>请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。<p><h4>实现 MyStack 类:</h4>void push(int x) 将元素 x 压入栈顶。<br>int pop() 移除并返回栈顶元素。<br>int top() 返回栈顶元素。<br>boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。</p></p><p>输入:["MyStack", "push", "push", "top", "pop", "empty"][[], [1], [2], [], [], []]<br>输出:[null, null, null, 2, 2, false]<p>解释:<br>MyStack myStack = new MyStack();<br>myStack.push(1);<br>myStack.push(2);<br>myStack.top(); // 返回 2<br>myStack.pop(); // 返回 2<br>myStack.empty(); // 返回 False<br></p></p><script> // 创建栈var MyStack = function() {this.queue1=[]this.queue2=[]   };/** * @param {number} x* @return {void}*/// 给栈中添加元素MyStack.prototype.push = function(x) {this.queue1.push(x)};/*** @return {number}*/// 弹出(栈顶元素)(队1的最后一个元素)MyStack.prototype.pop = function() {// 栈是先进后出,队是先进先出,将队1的第一个弹出作为队2的输入,然后队2就是队1的逆序(队1剩的最后一个元素就是栈顶元素,即需要删除的元素),然后将剩余元素按照相同的方法返回队1let topElement;while (this.queue1.length > 1) {this.queue2.push(this.queue1.shift())}topElement = this.queue1.shift()while (this.queue2.length) {this.queue1.push(this.queue2.shift());}return topElement;};/*** @return {number}*/// 返回栈顶元素MyStack.prototype.top = function() {// 和pop相似,只是不删除栈顶元素,使用临时变量存储,然后将队1剩余的元素压入队2,然后将队2所有的元素返回给队1let topElement;while (this.queue1.length > 1) {this.queue2.push(this.queue1.shift())}topElement = this.queue1[0]this.queue2.push(this.queue1.shift())while (this.queue2.length > 0) {this.queue1.push(this.queue2.shift());}return topElement;};/*** @return {boolean}*/// 判断栈是否为空(判断队1的长度即可)MyStack.prototype.empty = function() {return !this.queue1.length;};var myStack = new MyStack();myStack.push(1);myStack.push(2);console.log(myStack.top()); // Output: 2console.log(myStack.pop()); // Output: 2console.log(myStack.empty()); // Output: false/** * Your MyStack object will be instantiated and called as such:* var obj = new MyStack()* obj.push(x)* var param_2 = obj.pop()* var param_3 = obj.top()* var param_4 = obj.empty()*/</script></body>
</html>

6、力扣通过代码

   // 创建栈var MyStack = function() {this.queue1=[]this.queue2=[]   };/** * @param {number} x* @return {void}*/// 给栈中添加元素MyStack.prototype.push = function(x) {this.queue1.push(x)};/*** @return {number}*/// 弹出MyStack.prototype.pop = function() {// 栈是先进后出,队是先进先出,将队1的第一个弹出作为队2的输入,然后队2就是队1的逆序(队的第一个元素就是栈顶元素,即需要删除的元素)let topElement;while (this.queue1.length > 1) {this.queue2.push(this.queue1.shift())}topElement = this.queue1.shift()while (this.queue2.length) {this.queue1.push(this.queue2.shift());}return topElement;};/*** @return {number}*/// 返回栈顶元素MyStack.prototype.top = function() {let topElement;while (this.queue1.length > 1) {this.queue2.push(this.queue1.shift())}topElement = this.queue1[0]this.queue2.push(this.queue1.shift())while (this.queue2.length > 0) {this.queue1.push(this.queue2.shift());}return topElement;};/*** @return {boolean}*/// 判断栈是否为空MyStack.prototype.empty = function() {return !this.queue1.length;};

相关文章:

算法13(力扣225)-用队列实现栈

1、问题 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。…...

【Elasticsearch】文本分类聚合Categorize Text Aggregation

响应参数讲解: key &#xff08;字符串&#xff09;由 categorization_analyzer 提取的标记组成&#xff0c;这些标记是类别中所有输入字段值的共同部分。 doc_count &#xff08;整数&#xff09;与类别匹配的文档数量。 max_matching_length &#xff08;整数&#xff09;从…...

【redis】缓存设计规范

本文是 Redis 键值设计的 14 个核心规范与最佳实践&#xff0c;按重要程度分层说明&#xff1a; 一、通用数据类型选择 这里我们先给出常规的选择路径图。 以下是对每个步骤的分析&#xff1a; 是否需要排序&#xff1f;&#xff1a; zset&#xff08;有序集合&#xff09;用…...

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…...

流媒体缓存管理策略

缓存管理策略是指为了优化性能、资源使用和用户体验而对缓存数据进行管理的方法和规则。以下是一些常见的缓存管理策略&#xff1a; 1. LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09; 原理&#xff1a;当缓存满了&#xff0c;需要腾出空间时&…...

2025简约的打赏系统PHP网站源码

源码介绍 2025简约的打赏系统PHP网站源码 源码上传服务器&#xff0c;访问域名/install.php安装 支持自定义金额打赏 集成支付宝当面付 后台管理系统 订单记录查询 效果预览 源码获取 2025简约的打赏系统PHP网站源码...

交叉编译工具链下载和使用

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

BUU28 [GXYCTF2019]BabySQli1

常规万能密码&#xff0c;发现登不上去 过滤掉了or&#xff0c;&#xff0c;当尝试了n种方法以后&#xff0c;最关键的是发现()居然也被过滤了 哈哈&#xff0c;那玩个淡&#xff0c; 再搜wp&#xff01;&#xff01; 当输入admin的时候&#xff0c;提示密码错误&#xff0…...

ubuntu20.04+RTX4060Ti大模型环境安装

装显卡驱动 这里是重点&#xff0c;因为我是跑深度学习的&#xff0c;要用CUDA&#xff0c;所以必须得装官方的驱动&#xff0c;Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/&#xff0c;选择类型&#xff0c;最新版本下载。 挨个运行&#…...

Rust语言进阶之标准输入: stdin用法实例(一百零五)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…...

结构化表达(三):归纳分组

目录 归纳分组 一、如何归纳分组 二、如何掌握更多模型 归纳分组 一、如何归纳分组 整理思路&#xff0c;多用分类模型&#xff0c;列如&#xff1a; 1、内部、外部分类。 2、市场营销学中的4P&#xff1a;产品、渠道、价格、促销。 3、战略3C&#xff1a;公司、客户、竞…...

5G技术解析:从核心概念到关键技术

1. 引言 5G技术的迅猛发展正在重塑我们的生活方式和社会结构。它不仅仅是新一代的移动通信技术&#xff0c;更是一场深刻的技术革命。5G网络正在以其惊人的高速、低延迟和大带宽能力&#xff0c;为智能家居、自动驾驶、工业自动化、远程医疗等另一带来前所未有的可能性。 本文…...

DeepSeek 引领的 AI 范式转变与存储架构的演进

近一段时间&#xff0c;生成式 AI 技术经历了飞速的进步&#xff0c;尤其是在强推理模型&#xff08;Reasoning-LLM&#xff09;的推动下&#xff0c;AI 从大模型训练到推理应用的范式发生了剧变。以 DeepSeek 等前沿 AI 模型为例&#xff0c;如今的 AI 技术发展已不局限于依赖…...

基于Hexo实现一个静态的博客网站

原文首发&#xff1a;https://blog.liuzijian.com/post/8iu7g5e3r6y.html 目录 引言1.初始化Hexo2.整合主题Fluid3.部署评论系统Waline4.采用Nginx部署 引言 Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目&#xff0c;旨在提供一个简单、快速且易于扩展的静态博客生…...

doris:MySQL Dump

Doris 在 0.15 之后的版本已经支持通过 mysqldump 工具导出数据或者表结构 使用示例​ 导出​ 导出 test 数据库中的 table1 表&#xff1a;mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1 导出 test 数据库中的 table1 表结构&am…...

DeepSeek-R1 云环境搭建部署流程

DeepSeek横空出世&#xff0c;在国际AI圈备受关注&#xff0c;作为个人开发者&#xff0c;AI的应用可以有效地提高个人开发效率。除此之外&#xff0c;DeepSeek的思考过程、思考能力是开放的&#xff0c;这对我们对结果调优有很好的帮助效果。 DeepSeek是一个基于人工智能技术…...

LabVIEW铅酸蓄电池测试系统

本文介绍了基于LabVIEW的通用飞机铅酸蓄电池测试系统的设计与实现。系统通过模块化设计&#xff0c;利用多点传感器采集与高效的数据处理技术&#xff0c;显著提高了蓄电池测试的准确性和效率。 ​ 项目背景 随着通用航空的快速发展&#xff0c;对飞机铅酸蓄电池的测试需求也…...

android studio无痛入门

在Android Studio中创建和管理项目主要涉及以下几个步骤&#xff1a; 1. 创建新项目 打开Android Studio&#xff0c;点击“Start a new Android Studio project”或者“File” > “New” > “New Project”。 选择一个模板&#xff0c;例如“Empty Activity”&#xff0…...

GNN多任务预测模型实现(二):将EXCEL数据转换为图数据

目录 一. 引言 二. 加载和检查数据 三. 提取特征和标签 四. 标准化特征 五. 构建节点索引 六. 构建边及其特征 七. 总结 八. 结语 一. 引言 在图神经网络&#xff08;Graph Neural Networks, GNNs&#xff09;的多任务学习场景中&#xff0c;数据预处理是至关重要的一…...

【机器学习】K-Nearest Neighbor KNN算法原理简介及要点

KNN算法用于分类 简介KNN分类算法的流程距离度量K值选择分类表决加权分类表决 简介 KNN的全称是K Nearest Neighbors. 这种算法可以被用来进行分类&#xff0c;原理是根据离特征点最近的K个点所属的类别进行分类。 KNN分类算法的流程 KNN算法的整体流程是我们需要将训练数据…...

ARM嵌入式学习--第十三天(I2C)

I2C --介绍 I2C&#xff08;Inter-intergrated Circuit 集成电路&#xff09;总线是Philips公司在八十年代初推出的一种串行、半双工的总线&#xff0c;主要用于近距离、低速的芯片之间的通信&#xff1b;I2C总线有俩根双向的信号线&#xff0c;一根数据线SDA用于收发数据&…...

error: externally-managed-environment

当你执行 pip3 install ipykernel 时遇到 error: externally-managed-environment 错误&#xff0c;这是因为从 Python 3.11 开始&#xff0c;为了避免破坏系统级 Python 环境&#xff0c;引入了外部管理环境&#xff08;externally - managed environment&#xff09;的概念&a…...

使用PyCharm进行Django项目开发环境搭建

如果在PyCharm中创建Django项目 1. 打开PyCharm&#xff0c;选择新建项目 2.左侧选择Django&#xff0c;并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一&#xff1a; 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...

移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)

课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人...

TCP服务器与客户端搭建

一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…...

flutter Selector 使用

在 Flutter 中&#xff0c;Selector 是 provider 包中的一个组件&#xff0c;用于在状态管理中高效地选择和监听特定部分的状态变化。Selector 可以帮助你避免不必要的重建&#xff0c;只在你关心的数据发生变化时才重建 widget。 基本用法 Selector 的基本用法如下&#xff…...

deepseek来讲lua

Lua 是一种轻量级、高效、可嵌入的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念&#xff1a; 1. 特点 轻量级&#xff1a;Lua 的核心非常小&#xff0c;适合嵌入到其他应用程序中。高效&#xff1a;Lua 的执…...

【大数据技术】本机DataGrip远程连接虚拟机MySQL/Hive

本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...

【C++篇】C++11新特性总结1

目录 1&#xff0c;C11的发展历史 2&#xff0c;列表初始化 2.1C98传统的{} 2.2&#xff0c;C11中的{} 2.3&#xff0c;C11中的std::initializer_list 3&#xff0c;右值引用和移动语义 3.1&#xff0c;左值和右值 3.2&#xff0c;左值引用和右值引用 3.3&#xff0c;…...

redis之RDB持久化过程

redis的rdb持久化过程 流程图就想表达两点&#xff1a; 1.主进程会fork一个子进程&#xff0c;子进程共享主进程内存数据(fork其实是复制页表)&#xff0c;子进程读取数据并写到新的rdb文件&#xff0c;最后替换旧的rdb文件。 2.在持久化过程中主进程接收到用户写操作&#x…...