8 包含min函数的栈
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函数的栈相关推荐
- 剑指offer:面试题30. 包含min函数的栈
题目:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). MinStack min ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 《剑指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]*. ...
- 【简洁写法】剑指 Offer 30. 包含min函数的栈
立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...
- 包含min函数的栈 python_面试题_设计包含 min函数的栈
设计包含 min函数的栈() 定义栈的数据结构,要求添加一个 minminmin函数,能够得到栈的最小元素. 要求函数 min.push以及 pop 的时间复杂度都是 O(1). #include u ...
- [剑指offer]面试题21:包含min函数的栈
面试题21:包含min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 栈内压入3.4.2.1之 ...
- java的min函数_Java语言实现包含min函数的栈
package stack; import java.util.ArrayList; /** * 实现包含min函数的栈 * @author DHC * @param */ public class ...
- 【LeetCode】剑指 Offer 30. 包含min函数的栈
[LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...
- 剑指offer——30.包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 知识点: 这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈 注意: 无 代码实现 ...
- 剑指offer——面试题21:包含min函数的栈
剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...
最新文章
- 一些极其简易的自动巡线车模
- ftp服务器需要ssl证书吗,ftp+ssl证书安全认证
- Fast RCNN 训练自己的数据集(3训练和检测)
- 图像的稀疏表示——ScSPM和LLC的总结
- Queue 队列的用法
- 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.2 选购镜头时应注意的事项...
- glob.glob() + os.path.join() :找到文件路径,拼接路径
- 参考阿里云DMS快速开发数据管理平台
- [冲啊!!!!!]小白SLAM相关基础知识
- 从零开始webpack搭建项目
- 微信小程序做出 物流签收信息(步骤条) 源码
- Sublime快捷键 PyV8的下载与安装
- java 浏览器 pdf_使用Java Servlet在浏览器中显示Pdf
- PDMS.NET窗体
- Axure制作倒计时
- kubernetes快速切换集群和名称空间
- untiy实现文本滚动
- java 5,8,9章复习
- linux查看pid的用户名,在Linux中用Pstree命令及显示PID和PGID,显示命令行参数及突出显示...
- Power supply 子系统之最简驱动实现