题目:用两个栈实现队列

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

示例 1:

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

示例 2:

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

提示:

1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用

模板:

class CQueue {
public:CQueue() {}void appendTail(int value) {}int deleteHead() {}
};/*** Your CQueue object will be instantiated and called as such:* CQueue* obj = new CQueue();* obj->appendTail(value);* int param_2 = obj->deleteHead();*/

解题:

入栈操作O(1),出栈操作最坏O(n),最好O(1)。

class CQueue {
private:stack<int> inStack;stack<int> outStack;
public:CQueue() {}void appendTail(int value) {inStack.push(value);}int deleteHead() {int res=-1;if(!outStack.empty()) {res=outStack.top();outStack.pop();} else if(!inStack.empty()) {while(!inStack.empty()) {outStack.push(inStack.top());inStack.pop();}res = outStack.top();outStack.pop();}return res;}
};

拓展:如果不要求栈的个数,可以用一个vector解决:

class CQueue {
private:vector<int> inStack;
public:CQueue() {}void appendTail(int value) {inStack.push_back(value);}int deleteHead() {int res =-1;if(inStack.size()!=0){res = inStack[0];inStack.erase(inStack.begin());}return res;}};

剑指offer:面试题09. 用两个栈实现队列相关推荐

  1. 剑指offer面试题09. 用两个栈实现队列(队列、栈)

    题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,dele ...

  2. 剑指Offer - 面试题9. 用两个栈实现队列

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

  3. 剑指offer面试题[7]-用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路: 一个队列包含两个栈,这道题目的意图是要求我们操作两个"先进后出"的栈实现 ...

  4. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

  5. 剑指Offe面试题:用两个栈实现队列

    用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析 首先可以自己尝试使用1 2 3少量元素的入栈出栈摸索两个栈的使用,从特殊到一般 ...

  6. 剑指offer(05)用两个栈实现队列

    参考:https://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html 思路1:始终维护s1作为存储空间,以s2作为临时缓冲 ...

  7. 剑指offer——面试题37:两个链表的第一个公共结点

    剑指offer--面试题37:两个链表的第一个公共结点 20180906整理 Solution1: 时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法 /* struct ListNode {in ...

  8. [剑指offer]面试题37:两个链表的第一个公共结点

    面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出它们的第一个公共结点.链表结点定义如下: struct ListNode {int val;ListNode *next;ListNode ...

  9. 剑指Offer面试题:31.两个链表的第一个公共节点

    一.题目:两个链表的第一个公共节点 题目:输入两个链表,找出它们的第一个公共结点. 链表结点定义如下,这里使用C#语言描述: public class Node{public int key;publ ...

最新文章

  1. Android 控件学习--自定义SeekBar
  2. git常见命令 的区分
  3. ucenter php7.0版,UCenter1.5.0/UCenter Home1.5/Discuz! 7.0
  4. 【分治】动态点分治 ([ZJOI2007]捉迷藏)
  5. android搜索框布局文件,android搜索框列表布局,流程及主要步骤思维导图
  6. UVA515 King
  7. idea里查找maven的jar包冲突
  8. 74ls20设计半加器_组合逻辑电路(半加器全加器及逻辑运算)实验报告
  9. 机器学习模型太慢?来看看英特尔(R) 扩展加速 ⛵
  10. tds3014 自动测试软件,TDS3014 Tektronix TDS3014C
  11. java计算机毕业设计Web网上购书后台管理系统MyBatis+系统+LW文档+源码+调试部署
  12. 两线怎么接三线插座图_三线插座怎么接两线
  13. html网页设计板报,html5做一个黑板报页面
  14. 一些前端入门者可能需要的网站
  15. Mobile2.0不对等的战争
  16. 网易云linux版本如何安装包,网易云音乐linux版下载-网易云音乐linux 安装包v1.1.0 官方版 - 极光下载站...
  17. R语言实战读书笔记(八)回归
  18. oracle在Windows,linux备份恢复(tina)
  19. 返回html404字符串,post提交数据后,返回的网页错误404怎么回事。
  20. 如何开启Direct3D

热门文章

  1. kdd cup 2019
  2. JQuery插件,轻量级表单模型验证(续 二)
  3. linux 判断某个命令是否安装
  4. linux内核调优参考
  5. Hive Metastore 连接报错
  6. jquery-tmpl 插件
  7. There is no Citrix MetaFrame server configured on the specified address错误的解决方法
  8. 三维刚体变化中Rcw,tcw的含义
  9. 自走棋电脑版_2019年的爆款自走棋玩法,百花齐放过后,却身陷“变现烦恼”...
  10. php redis search,php redis类