使用栈实现队列 Implement Queue using Stacks

为什么80%的码农都做不了架构师?>>>   hot3.png

问题:

Implement the following operations of a queue using stacks.

  • push(x) -- Push element x to the back of queue.
  • pop() -- Removes the element from in front of queue.
  • peek() -- Get the front element.
  • empty() -- Return whether the queue is empty.

Notes:

  • You must use only standard operations of a stack -- which means only push to toppeek/pop from topsize, and is emptyoperations are valid.
  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).

解决:

【注】关于测试参数的解释:

["MyQueue","push","push","peek","pop","pop","empty"] --- 表示要进行的操作

[[],[1],[2],[],[],[],[]] --- 表示对应传入的参数

① 使用两个栈s1,s2,进栈的时候不做任何处理,出栈的时候把栈逆序放在另外一个栈,出另外一个栈。
之前写经常出现空栈异常或者超时,就是没有写好s1,s2之间的转换。

class MyQueue { // 87ms
    Stack<Integer> s1 = new Stack<>();
    Stack<Integer> s2 = new Stack<>();
    /** Initialize your data structure here. */
    public MyQueue() {}
    /** Push element x to the back of queue. */
    public void push(int x) {
        while(! s2.isEmpty()) s1.push(s2.pop());
        s1.push(x);

    }
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        while(! s1.isEmpty()) s2.push(s1.pop());
        return s2.pop();

    }
    /** Get the front element. */
    public int peek() {
        while(! s1.isEmpty()) s2.push(s1.pop());
        return s2.peek();
    }
    /** Returns whether the queue is empty. */
    public boolean empty() {
        while(! s2.isEmpty()) s1.push(s2.pop());
        return 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();
 */

② 使用两个栈,在进栈的时候,把栈逆序放在另外一个栈,出的时候直接出另外一个栈就可以了。

class MyQueue { //93ms
    Stack<Integer> s1 = new Stack<>();
    Stack<Integer> s2 = new Stack<>();
    /** Initialize your data structure here. */
    public MyQueue() {}
    /** Push element x to the back of queue. */
    public void push(int x) {
        while(! s1.isEmpty()) s2.push(s1.pop());
        s2.push(x);
        while(! s2.isEmpty()) s1.push(s2.pop());

    }
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        return s1.pop();
    }
    /** Get the front element. */
    public int peek() {
        return s1.peek();
    }
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return s1.isEmpty();
    }
}

③ 除了使用两个栈之外,额外使用一个指针指向头部。

class MyQueue { //113ms
    Stack<Integer> s1 = new Stack<>();
    Stack<Integer> s2 = new Stack<>();
    int head;
    /** Initialize your data structure here. */
    public MyQueue() {}
    /** Push element x to the back of queue. */
    public void push(int x) {
        if(s1.isEmpty()) head = x;
        s1.push(x);
    }
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        while(! s1.isEmpty()) s2.push(s1.pop());
        int top = -1;
        if(! s2.isEmpty()){
            top = s2.pop();
            if(! s2.isEmpty()) head = s2.peek();
        }
        while(! s2.isEmpty()) s1.push(s2.pop());
        return top;
    }
    /** Get the front element. */
    public int peek() {
        return head;
    }
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return s1.isEmpty();
    }
}

转载于:https://my.oschina.net/liyurong/blog/1512615

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

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

相关文章

550什么意思_研报翻译官第二期:带你了解什么是CPI

欢迎收看“第二期”研报翻译官&#xff0c;临近年末&#xff0c;各类金融研报接踵而至&#xff0c;我们也常会看到GDP、CPI、PPI这类字眼。过年回家跟亲戚朋友唠嗑的时候&#xff0c;如果不扯上几句CPI或PPI&#xff0c;都显自己得不够专业。听你们吹牛&#xff0c;我炒菜都有劲…

jieba库的使用

jieba库的使用: jieba库是一款优秀的 Python 第三方中文分词库&#xff0c;jieba 支持三种分词模式&#xff1a;精确模式、全模式和搜索引擎模式&#xff0c;下面是三种模式的特点。 精确模式&#xff1a;试图将语句最精确的切分&#xff0c;不存在冗余数据&#xff0c;适合做文…

mysql结果集相减_MySQL_(Java)使用JDBC向数据库发起查询请求

课程相关链接&#xff1a;JDBC编程和MySQL数据库课程源代码在文章末尾~Java Database Connectivity简单来说就是使用Java里面提供的一些类和方法&#xff0c;利用程序链接数据库&#xff0c;进行增删改查操作。这个过程就叫做JDBC编程接下来我们便分五步通过JDBC对MySQL中的数据…

在双系统(Windows与Ubuntu)下删除Ubuntu启动项

问题概述&#xff1a;因为在自己学习Linux的时候&#xff0c;按照网上的教程错误的删除了Ubuntu的一个内核驱动&#xff0c;导致Ubuntu不能启动。我想到的办法是重新安装系统&#xff0c;重装系统的第一步便是将Ubuntu从电脑中卸载。该笔记是有关如何删除Ubuntu启动项的。 使用…

神舟笔记本bios_海尔雷神(蓝天)神舟战神游戏本风扇狂转掉电大写灯狂闪维修实例...

昨天收到一台网友寄过来的海尔雷神游戏本。说到这个游戏本品牌&#xff0c;其实有几个品牌的笔记本&#xff0c;它们的主板和模具是一模一样的&#xff0c;也就是我们看到的品牌log不一样而已。比如神舟的战神 &#xff0c;机械师&#xff0c;机械革命&#xff0c;麦本本等等。…

“康园圈--互联网+校园平台“项目之成果展示及项目总结

一、总体效果&#xff08;ipad端截图&#xff09; 网站前台页面网站后台管理台页面二、前台访问链接&#xff08;用pc访问效果最佳&#xff09;&#xff1a;http://www.liangzhilin.cn:9100/kangyuanquan/ &#xff08;为保证数据安全&#xff0c;后台管理链接不对外公开&#…

java中二进制怎么说_面试:说说Java中的 volatile 关键词?

volatile 这个关键字可能很多朋友都听说过&#xff0c;或许也都用过。在 Java 5 之前&#xff0c;它是一个备受争议的关键字&#xff0c;因为在程序中使用它往往会导致出人意料的结果。在 Java 5之后&#xff0c;volatile 关键字才得以重获生机。volatile 关键字虽然从字面上理…

类的详解

面向对象是一种编程方式&#xff0c;此编程方式的实现是基于对类和对象的使用。类是一个模板&#xff0c;模板中包装了多个“函数”供使用&#xff08;可以讲多函数中公用的变量封装到对象中&#xff09;。对象&#xff0c;根据模板创建的实例&#xff08;即对象&#xff09;&a…

什么情况不能办理房产抵押贷款 房产抵押贷能贷多少?

所谓房产抵押贷款是指以自己或亲友的房产作为抵押物向贷款机构申请贷款&#xff0c;款项可用于企业经营、买房、买车、装修及其他用途的融资方式。但是有些情况是规定不能申请房产抵押贷款的&#xff0c;而且贷款的数额是有限的&#xff0c;不是想贷多少就多少。那么&#xff0…

2数据库表增加一个字段_14个实用的数据库设计技巧!

1. 原始单据与实体之间的关系可以是一对一、一对多、多对多的关系。在一般情况下&#xff0c;它们是一对一的关系&#xff1a;即一张原始单据对应且只对应一个实体。在特殊情况下&#xff0c;它们可能是一对多或多对一的关系&#xff0c;即一张原始单证对应多个实体&#xff0c…

错误: 找不到或无法加载主类 helloworld_全面剖析虚拟机类加载机制

1.引言java源文件经过编译后生成字节码class文件&#xff0c;需要经过虚拟机加载并转换成汇编指令才能执行&#xff0c;那么虚拟机是如何一步步加载这些class文件的对于java程序员是完全透明的&#xff0c;本文尝试全面分析jvm类加载机制。2.思考开始之前我们来简单思考一下&am…

200道物理学难题——038蚱蜢跃树

转载于:https://www.cnblogs.com/hanford/p/6168514.html

strcmp可以比较数组么_大家都用过百度云,但你面试过百度云么

作者&#xff1a;黄小斜百度研发面经百度智能云软件研发工程师百度智能云研发岗好像是做控制台方面的组一面&#xff1a;1自我介绍&#xff0c;项目2 static关键字有什么用&#xff0c;static修饰不同东西时有什么作用&#xff0c;内部类用static修饰和不用static修饰有何区别。…

go kegg_KEGG分析及可视化

上一篇推文中我们解释了GO富集分析及可视化&#xff08;GO富集分析及可视化&#xff09;&#xff0c;除了GO富集分析&#xff0c;我们经常在paper中看到KEGG分析&#xff0c;KEGG是什么呢&#xff0c;Kyoto Encyclopedia of Genes and Genomes&#xff0c;京都基因和基因组百科…

IntelliJ IDEA注册码

IntelliJ IDEA注册码 http://idea.lanyus.com/ 1.导航栏下 2.help下 3.register点击 4.单选Activation code 5.粘贴注册码 转载于:https://www.cnblogs.com/YUJIE666/p/10662561.html

第十一次作业

1。题目&#xff1a; 输入一个字符串&#xff0c;统计大写字母、小写字母、空格、数字和其他字符的个数。(要求用字符数组 代码 #include<stdio.h> #define n 100 int main() {char a[n];int i,a10,b0,c0,d0;printf("输入字符串&#xff1a;\n");gets(a);for(i…

servlet中文乱码_10分钟快速掌握Servlet相关基础知识

Servlet的学习路线1、 创建Servlet2、 Servlet的相关配置3、 Servlet的生命周期4、 HttpServletRequest接口5、 HttpServletResponse接口6、 HttpSession接口7、 Filter、Listener接口Servlet的相关配置1、 创建Servlet extends HttpServlet2、 配置Serlvet第1种配置方式: web.…

python之collections之有序字典(OrderedDict)

一、定义OrderedDict是对字典的补充&#xff0c;它记住了字典元素的添加顺序。eg&#xff1a; 二、OrderedDict相关方法def clear(self): # real signature unknown; restored from __doc__ """     od.clear() -> None. Remove all items from od. …

进阶4:hive 安装

安装包&#xff1a; apache-hive-2.1.1-bin.tar.gz 安装步骤&#xff1a; 1.上传 apache-hive-2.1.1-bin.tar.gz 到linux; 2.解压文件&#xff1a; tar zxvf apache-hive-2.1.1-bin.tar.gz 3.安装mysql (仅支持mysql 5.7以下版本&#xff0c;不支持5.7或更高版本&#xff0c…

macbookpro接口叫什么_【科普】什么是雷电接口?苹果电脑MACBOOK PRO有吗?

刚接触笔记本的朋友不知道USB-C口是什么,也不知道雷电接口(Thunderbolt)是什么,只知道MACBOOK PRO有雷电3接口。简单来说 雷电接口是USB TYPE-C的替代模式,在此了解【什么是USB TYPE-C】 什么是雷电接口? 借用百度百科的表达 2011年2月24日,英特尔发布了长期以来广为宣传的…