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

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

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
class CQueue {public:stack<int> s1,s2;CQueue() {}void appendTail(int value) {s1.push(value);}int deleteHead() {if(!s2.empty()){int res =s2.top();s2.pop();return res;}else{while(!s1.empty()){int k =s1.top();s1.pop();s2.push(k);}if(s2.empty()){return -1;}else{int res = s2.top();s2.pop();return res;}}}
};/*** Your CQueue object will be instantiated and called as such:* CQueue* obj = new CQueue();* obj->appendTail(value);* int param_2 = obj->deleteHead();*/

思路:定义两个栈,队列push时输入到st1,pop时如果st2有元素直接弹出,没有的话将s1中的全部弹到s2,然后判断s2如果为空那么返回-1,如果非空弹出栈顶元素。

剑指 Offer 30. 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.min();   --> 返回 -2.
class MinStack {public:/** initialize your data structure here. */stack<int> datastack;stack<int> minstack;MinStack() {}void push(int x) {datastack.push(x);if(minstack.empty()){minstack.push(x);}else{if(x > minstack.top()) minstack.push(minstack.top());else{minstack.push(x);}}}void pop() {datastack.pop();minstack.pop();}int top() {return datastack.top();}int min() {return minstack.top();}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(x);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->min();*/

思路:定义两个栈,一个数据栈实现正常栈的功能,一个最小栈,存与数据栈对应位置的min值。有一种键值对的思想在其中。

剑指offter(1/31)栈与队列相关推荐

  1. abap判断包含字符当中包含小数点_剑指Offer整理3 -- 栈和队列 + 数学和字符串

    专题3 栈和队列 + 数学和字符串 专题3-1 栈和队列 1. 栈的压入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字 ...

  2. 剑指offer---用两个栈实现队列

    题目:用两个栈实现队列 要求:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 1 class Solution 2 { 3 public: 4 void push ...

  3. 剑指offer 算法(栈和队列 查找和排序)

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解析:用栈来模拟队列.我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc, ...

  4. 剑指Offer09-用两个栈实现队列

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

  5. 剑指offter笔记

    剑指offter笔记 数组中重复的数字 二维数组中的查找 替换空格 从尾到头打印链表 递归反转链表解题思路 重建二叉树 用两个栈实现队列 斐波那契数列 青蛙跳台阶问题 旋转数组的最小数字 矩阵中的路径 ...

  6. 《剑指offter》

    剑指offter 电子书PDF        https://github.com/YST521/JZOF.git 最近几天看博客时发现一本叫 剑指offter的书 ,里面主要是一些算法题.这些算法面 ...

  7. 剑指offer两个栈来实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个水题,不过有一个坑:我们假设stack1是输入用的,stack2是输出用的,必须是stack2 ...

  8. 剑指offer-用两个栈实现一个队列

    注意使用一个栈存储从头到尾的数据,然后利用该栈输出数据,同时使用另外一个栈存储从尾到头的数据. void push(int node) {stack1.push(node);}int pop() {i ...

  9. 剑指Offer - 面试题59 - II. 队列的最大值(deque模拟单调栈)

    1. 题目 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value.push_back 和 pop_front 的时间复杂度都是O(1). 若队列为空,pop_f ...

最新文章

  1. 【一步步学小程序】1.创建项目以及TabBar
  2. 学AI哪家强?清华全球第1,Top5中有这3所中国高校
  3. bug修复录-qq浏览器中post请求时body为空
  4. matlab中fminunc函数使用方法,[分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB)...
  5. 与数学表达式对应的python表达式_与数学表达式cd/2ab对应的Python表达式中,不正确的是:...
  6. MongoDB数据库(4.mongodb数据库的备份和恢复)
  7. ElasticSearch 创建父子类型
  8. 【空间数据库】ArcSDE 10.7+SQLEXPRESS+ArcServer 10.7.ecp企业级数据库环境搭建
  9. OpenResty之ngx.ssl
  10. MVVM架构~Knockoutjs系列之text,value,attr,visible,with的数据绑定
  11. 7.1 - CRM系统
  12. wordpress知更鸟begin主题添加菜单字体图标
  13. 【转】Android世界的Swift - Kotlin语言
  14. 电子邮件收发这样实现!!!
  15. 为什么会出现数据库可疑_为什么要监视网络中的可疑活动
  16. C++和ASM文件的互相调用
  17. pandas——解决excel科学计数法问题
  18. java火焰纹章攻略女神之剑_火焰纹章风花雪月图文攻略 主线流程+角色培养+转职系统 白云之章女神再生仪式②-游侠网...
  19. 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)
  20. Mongodb修改器

热门文章

  1. java潜龙谍影,我的世界:三个选择下界合金装备的理由!下界合金到底有多稀有?...
  2. SPICE二极管直流分析原理
  3. java版wifi下载电脑版_360wifi下载
  4. java求第k个斐波那契数_Java程序查找第n个斐波那契数
  5. 程序员一生必读的书籍
  6. JAVA入门基础(5)—— 流程控制
  7. HTML5+CSS期末大作业:篮球明星个人网站设计——篮球明星介绍(6页) 简单的学生DW网页设计作业成品 web课程设计网页规划与设计 简单个人网页设计作业 静态HTML旅行主题网页作业 DW
  8. 微服务架构——马丁弗勒
  9. 个人信息规范名称和收集规则参考
  10. 剑指Offer(JS版)