包含min函数的栈 【微软面试100题 第二题】
题目要求:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1).
参考题目:剑指offer第21题.
题目分析:
1.采用面向对象思想,定义类StackWithMin,包含min、push和pop等方法;
2.StackWithMin类中包含两个栈:一个数据栈,一个辅助栈。数据栈中是每次压入的实际数据,辅助栈中是对应数据栈的当前结点的最小值。
解释:假设数据栈为stackdata,辅助栈为stackmin;令压栈数据依次为5-3-4-1-2;
则压入5:stackdata:5 , stackmin:5
压入3:----->stackdata:5-3 , stackmin:5-3
压入4:----->stackdata:5-3-4 , stackmin:5-3-3
压入1:----->stackdata:5-3-4-1 , stackmin:5-3-3-1
压入2:----->stackdata:5-3-4-1-2, stackmin:5-3-4-1-1
stackdata即为压入的实际数据,stackmin中每次压入的数据和之前stackmin中的输入比较,如果比之前的小则压入当前,如果比之前的大则压入之前的数据。
#include <iostream> #include <stack> #include <cassert>using namespace std;template<class T> class stackWithMin { public:stackWithMin(){}~stackWithMin(){}void push(const T& value);void pop();const T& min() const;void printStack(); private:stack<T> stackData;stack<T> stackMin; }; template<class T> void stackWithMin<T>::push(const T& value) {stackData.push(value);//辅助栈为空或者压入的元素小于辅助栈的栈顶元素,则压入当前元素;否则压入栈顶元素if(stackMin.empty() || stackMin.top()>value)stackMin.push(value);elsestackMin.push(stackMin.top()); } template<class T> void stackWithMin<T>::pop() {assert(stackData.size()>0 && stackMin.size()>0);stackData.pop();stackMin.pop(); } template<class T> const T& stackWithMin<T>::min() const {assert(stackData.size()>0 && stackMin.size()>0);return stackMin.top(); } template<class T> void stackWithMin<T>::printStack() {stack<T> tmp;cout << "当前栈中元素有:";while(stackData.size()){tmp.push(stackData.top());stackData.pop();}while(tmp.size()){stackData.push(tmp.top());cout << tmp.top();tmp.pop();}cout << endl; } int main(void) {stackWithMin<int> minStack;minStack.push(5);minStack.printStack();cout << "最小元素为:" << minStack.min() << endl;minStack.push(3);minStack.printStack();cout << "最小元素为:" << minStack.min() << endl;minStack.push(4);minStack.printStack();cout << "最小元素为:" << minStack.min() << endl;minStack.push(1);minStack.printStack();cout << "最小元素为:" << minStack.min() << endl;minStack.push(2);minStack.printStack();cout << "最小元素为:" << minStack.min() << endl;return 0; }
转载于:https://www.cnblogs.com/tractorman/p/4052675.html
包含min函数的栈 【微软面试100题 第二题】相关推荐
- 《剑指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]*. ...
- 包含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之 ...
- 剑指offer:面试题30. 包含min函数的栈
题目:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). MinStack min ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 【简洁写法】剑指 Offer 30. 包含min函数的栈
立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...
- 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 ...
最新文章
- 甘利俊一 | 信息几何法:理解深度神经网络学习机制的重要工具
- PicoBlaze输入/输出端口
- 7-17 BCD解密(10 分)
- c语言第一课程序代码怎么打,【北北的小程序】北のC语言第一课:helloworld
- zjnu1730 PIRAMIDA(字符串,模拟)
- java数组显示最大值,java 如何用方法在数组中找到最大值并显示他的名称?
- 二十五、MongoDB 索引 和 explain 的使用
- eas库存状态调整单不能反审核_仓储管理笔记:库存差错、毁损赔偿、自用管理、组织架构.........
- 关于MD5破解这件事
- java如何判断当前系统是windows还是linux?
- Apache Kylin中对上亿字符串的精确Count_Distinct示例
- BERT大魔王为何在商业环境下碰壁?
- ADO编程:error C2011: 'LockTypeEnum' : 'enum' type redefinition
- Java学习-Thread
- iOS攻城狮修炼之路
- tcl/tk参考——列表操作lsearch
- 一些模拟器在配置文件内查找端口号的方式
- 【自然语言处理】【文本生成】UniLM:用于自然语言理解和生成的统一语言模型预训练
- java计算机毕业设计高校学生综合素质测评系统源码+mysql数据库+系统+lw文档+部署
- python英语词汇读音_利用Python制作查单词小程序(一):抓取来自百度翻译的单词释义和音标...