剑指 Offer 09. 用两个栈实现队列

news2024/10/4 13:21:15

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]

示例 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

解题思路:

        

        栈无法实现队列功能: 栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。

        双栈可实现列表倒序

         设有含三个元素的栈 A=[1,2,3] 和空栈 B=[]。

         若循环执行 A 元素出栈并添加入栈 B ,直到栈 A 为空,则 A=[] , B=[3,2,1] ,即 栈 B 元素实现栈 A 元素倒序 。
         利用栈 B 删除队首元素: 倒序后,B 执行出栈则相当于删除了 A 的栈底元素,即对应队首元素。

class CQueue {
    LinkedList<Integer> A,B;
    //A是正序的栈,由于栈【先进后出】无法删除队首,所以需要B倒序,栈顶既是A的栈首
    public CQueue() {
        A=new LinkedList<Integer>();
        B=new LinkedList<Integer>();
    }
    
    public void appendTail(int value) {
        A.addLast(value);
    }
    
    public int deleteHead() {
        if(!B.isEmpty()){
            return B.removeLast();
        }
        if(A.isEmpty()){
            return -1;
        }
        //进行A倒序放进B
        while(!A.isEmpty()){
            B.addLast(A.removeLast());
        }
        return B.removeLast();
    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

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

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

相关文章

自然语言处理 第11章 问答系统 复习

问答系统问答系统概述问答系统定义问答(QA)系统发展历程问答系统分类&#xff1a;问答系统框架&#xff1a;内容提要专家系统检索式问答系统1.问题分析主要功能&#xff1a;问题分类 和 关键词提取问题分类实现方法2.关键词提取检索模块相关文档检索句段检索3. 答案抽取模块检索…

回顾2022年,展望2023年

这里写目录标题回顾2022年博客之星你参加了吗&#xff1f;学习方面写博客方面在涨粉丝方面展望2023回顾2022年 时间如梭&#xff0c;转眼间已经2023年了。 你开始做总结了吗&#xff1f; 博客之星你参加了吗&#xff1f; 这是 2022 博客之星 的竞选帖子&#xff0c; 请你在这…

【从零开始学习深度学习】36. 门控循环神经网络之长短期记忆网络(LSTM)介绍、Pytorch实现LSTM并进行训练预测

上一篇文章介绍了一种门控循环神经网络门控循环单元GRU&#xff0c;本文将介绍另一种常用的门控循环神经网络&#xff1a;长短期记忆&#xff08;long short-term memory&#xff0c;LSTM&#xff09;&#xff0c;它比GRU稍复杂一点。 本文将介绍其实现方法&#xff0c;并使用其…

leetcode 221. 最大正方形-java题解

题目所属分类 动态规划 前面写过一个面积最大的长方形 传送门 f[i, j]表示&#xff1a;所有以(i,j)为右下角的且只包含 1 的正方形的边长最大值 原题链接 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 代…

最邻近方法和最邻近插入法求TSP问题近似解(可视化+代码)

摘要&#xff1a;本文总体内容为介绍用最邻近方法(Nearest Neighbor Algorithm) 和最邻近插入法求解旅行商问题(Traveling Saleman Problem,TSP)。同时使用python实现算法&#xff0c;并调用networkx库实现可视化。此文为本人图论课下作业的成品&#xff0c;含金量&#xff1a;…

【若依】前后端分离版本

一、何为框架&#xff1f;若依框架又是什么&#xff1f;具备什么功能&#xff1f; 框架的英文为Framework&#xff0c;带有骨骼&#xff0c;支架的含义。在软件工程中&#xff0c;框架往往被定义为整个或部分系统的可重用设计&#xff0c;是一个可重复使用的设计构件。类似于一…

leetcode1801:积压订单中的订单总数(1.2日每日一题)

迟来的元旦快乐&#xff01;&#xff01;&#xff01; 题目表述&#xff1a; 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种…

电子档案利用安全控制的办法与实现

这篇文章是笔者2015年发表在《保密科学技术》第2期的一篇文章&#xff0c;时隔7年半温习了一遍之后感觉还有一定的可取之处&#xff0c;所以在结合当前档案法律法规相关要求并修改完善其中部分内容之后分享给大家。 引言 INTRODUCTION 21世纪是一个信息化高度发展的时代&#…

网站漏洞与漏洞靶场(DVWA)

数据来源 本文仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 为什么要攻击网站&#xff1f;常见的网站漏洞有哪些&#xff1f; 在互联网中&#xff0c;…

Java安装详细步骤(win10)

一、下载JDK JDK下载地址&#xff1a;Java Archive | Oracle&#xff0c;下图为win10版本 二、安装过程 2.1 以管理员方式运行exe 2.2 更改JDK安装目录和目标文件夹的位置 2.3 安装完成 三、配置环境变量 3.1 快速打开环境变量设置 WinR打开运行对话框&#xff0c;输入…

【计组】CPU并行方案--《深入浅出计算机组成原理》(四)

课程链接&#xff1a;深入浅出计算机组成原理_组成原理_计算机基础-极客时间 一、Superscalar和VLIW 程序的 CPU 执行时间 指令数 CPI Clock Cycle Time CPI 的倒数&#xff0c;又叫作 IPC&#xff08;Instruction Per Clock&#xff09;&#xff0c;也就是一个时钟周期…

软件测试新手入门必看

随着软件开发行业的日益成熟&#xff0c;软件测试岗位的需求也越来越大。众所周知&#xff0c;IT技术行业一直以来都是高薪岗位的代名词&#xff0c;零基础想要转业的朋友想要进入这个行业&#xff0c;入门软件测试是最佳的途径之一。考虑到大多数软件测试小白对这个行业的一片…

动态规划——树形dp

树形dp 文章目录树形dp概述树形dp 路径问题树的最长路径思路代码树的中心换根DP思路代码数字转换思路代码树形dp 有依赖的背包二叉苹果树思路代码树形dp 状态机没有上司的舞会思路代码战略游戏思路代码皇宫看守思路代码总结概述 树形 DP&#xff0c;即在树上进行的 DP。由于…

springboot常用启动初始化方法

在日常开发时&#xff0c;我们常常需要 在SpringBoot 应用启动时执行某一些逻辑&#xff0c;如下面的场景&#xff1a; 1、获取一些当前环境的配置或变量&#xff1b; 2、连接某些外部系统&#xff0c;读取相关配置和交互&#xff1b; 3、启动初始化多线程&#xff08;线程池…

Linux 网络编程套接字

目录 一.网络知识 1.网络通信 2.端口号 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;端口号和进程ID 3.TCP协议 4.UDP协议 5.网络字节序 二. socket编程接口 1.socket常见API 2.sockaddr结构 &#xff08;1&#xff09;sockaddr结构 &#xff08;2&a…

JavaScript 语句

文章目录JavaScript 语句JavaScript 语句分号 ;JavaScript 代码JavaScript 代码块JavaScript 语句标识符JavaScript 语句 JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。 JavaScript 语句 JavaScript 语句是发给浏览器的命令。 这些命令的作用是告诉浏…

顶象入选信通院“数字政府建设赋能计划”成员单位

为进一步推动数字政府建设提质增效&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;联合数字政府相关企业、科研机构共同成立“数字政府建设赋能计划”&#xff0c;旨在凝聚各方力量&#xff0c;整合优质资源&#xff0c;开展技术攻关&#xf…

FlinkSQL基本语法和概念

Flink Sql1、简介2、网址3、SQL客户端4、Queries5、Create6、Drop7、Alter8、Insert9、ANALYZE10、Describe11、Explain12、Use13、Show14、Load15、Unload16、Set17、Reset18、Jar19、Windowing TVF19.1、TUMBLE&#xff08;滚动窗口&#xff09;19.2、HOP&#xff08;滑动窗口…

rabbitmq+netcore6 【2】Work Queues:一个生产者两个消费者

文章目录1&#xff09;准备工作2&#xff09;新建消费者13&#xff09;新建消费者24&#xff09;生产者5&#xff09;知识点解读1、autoAck: true2、重复声明/前后不一致3、Message durability 消息持久化4、Fair Dispatch 公平调度5、综合以上知识点的代码&#xff1a;官网参考…

Linux的运行级别

Linux的运行级别: Linux系统有7种运行级别(runlevel): 运行级别 0&#xff1a;系统停机状态&#xff0c;系统默认运行级别不能设为0&#xff0c;否则不能正常启动运行运行级别 1&#xff1a;单用户工作状态&#xff0c;root权限&#xff0c;用于系统维护&#xff0c;找回丢失…