0 引言

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

1 抽象问题具体化

2 具体问题抽象分析

需要解决的两个主要问题如下。

(1)如何在复杂度O(1)的条件下,返回当前栈的最小值。解决思路是定义一个minNum变量保存当前栈的最小值。

(2)另外一个问题是如果当前最小值被弹出了,如何更新minNum的值。解决思路是定义一个新的栈,该栈用于保存次小的值。涉及到两步操作:

1)什么时候入栈:当前入栈的值小于等于最小值时,入栈

2)什么时候出栈:当前出栈值等于最小值时,更新最小值,出栈

3 demo

    stack<int> myStack;  // 数据栈stack<int> minorMinNum;   // 辅助栈int minNum = 99999999;     // 最小值void push(int value) {if(value <= minNum){     // 只有满足当前入栈值小于等于最小值的条件,才将该值压入辅助栈中,同时更新最小值
            minorMinNum.push(value);minNum = value;            }           myStack.push(value);}void pop() {int temp;if(!myStack.empty()){temp = myStack.top();myStack.pop();}            if(!minorMinNum.empty()){            if(temp == minNum){                // 只有满足当前出栈值等于最小值的条件,更新最小值,同时辅助栈出栈
                minorMinNum.pop();minNum = minorMinNum.top();                }                }}int top() {return myStack.top();}int min() {return minNum;}

4 代码优化

可以将上述变量minNum给省掉,写法精简如下。

    stack<int> myStack;stack<int> minorMinNum;void push(int value) {if(minorMinNum.empty()){minorMinNum.push(value);}else if(value <= minorMinNum.top())minorMinNum.push(value);                  myStack.push(value);}void pop() {      if(!myStack.empty() && !minorMinNum.empty()){if(myStack.top() == minorMinNum.top())minorMinNum.pop();myStack.pop();}}int top() {return myStack.top();}int min() {return minorMinNum.top();}

转载于:https://www.cnblogs.com/ghjnwk/p/10020287.html

8 包含min函数的栈相关推荐

  1. 剑指offer:面试题30. 包含min函数的栈

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

  2. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  3. 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列

    一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...

  4. 【简洁写法】剑指 Offer 30. 包含min函数的栈

    立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...

  5. 包含min函数的栈 python_面试题_设计包含 min函数的栈

    设计包含 min函数的栈() 定义栈的数据结构,要求添加一个 minminmin函数,能够得到栈的最小元素. 要求函数 min.push以及 pop 的时间复杂度都是 O(1). #include u ...

  6. [剑指offer]面试题21:包含min函数的栈

    面试题21:包含min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 栈内压入3.4.2.1之 ...

  7. java的min函数_Java语言实现包含min函数的栈

    package stack; import java.util.ArrayList; /** * 实现包含min函数的栈 * @author DHC * @param */ public class ...

  8. 【LeetCode】剑指 Offer 30. 包含min函数的栈

    [LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...

  9. 剑指offer——30.包含min函数的栈

    题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 知识点: 这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈 注意: 无 代码实现 ...

  10. 剑指offer——面试题21:包含min函数的栈

    剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...

最新文章

  1. 一些极其简易的自动巡线车模
  2. ftp服务器需要ssl证书吗,ftp+ssl证书安全认证
  3. Fast RCNN 训练自己的数据集(3训练和检测)
  4. 图像的稀疏表示——ScSPM和LLC的总结
  5. Queue 队列的用法
  6. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.2 选购镜头时应注意的事项...
  7. glob.glob() + os.path.join() :找到文件路径,拼接路径
  8. 参考阿里云DMS快速开发数据管理平台
  9. [冲啊!!!!!]小白SLAM相关基础知识
  10. 从零开始webpack搭建项目
  11. 微信小程序做出 物流签收信息(步骤条) 源码
  12. Sublime快捷键 PyV8的下载与安装
  13. java 浏览器 pdf_使用Java Servlet在浏览器中显示Pdf
  14. PDMS.NET窗体
  15. Axure制作倒计时
  16. kubernetes快速切换集群和名称空间
  17. untiy实现文本滚动
  18. java 5,8,9章复习
  19. linux查看pid的用户名,在Linux中用Pstree命令及显示PID和PGID,显示命令行参数及突出显示...
  20. Power supply 子系统之最简驱动实现

热门文章

  1. 欧拉路HDU3018
  2. 为Activity设置特定权限才能启动
  3. delphi7 提示注册过期问题
  4. [转]可伸缩系统的架构经验
  5. 实例演示oracle注入获取cmdshell的全过程
  6. 3.Contructor(构造器)模式—精读《JavaScript 设计模式》Addy Osmani著
  7. vue 自定义 移动端筛选条件
  8. iOS开发之如何将字典转为模型
  9. instanceof的用法①
  10. Java设计模式6:策略模式