包含min函数的栈
Posted zhudingtop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含min函数的栈相关的知识,希望对你有一定的参考价值。
【问题】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
【思路】
由于这个题目要求在O(1)找到最小值,首先我们先来看下数据在栈中如何储存,假设有一些数据这样依次入栈:6,4,3,5,4,此时最小值为3,但随着push和pop操作,其最小值都会更新,我们使用另外一个栈来储存每个阶段的最小值!怎么储存呢?
操作栈:6,4,3,5,4
最小栈:6,4,3,空,空
当压入一个数时,我们判断这个数是否小于等于栈顶,若是,此时最小值更新,我们将这个数压入到最小栈中!因此最小栈的栈顶储存的是每个操作(push或pop)后的栈的最小值。
当弹出时,检查是否与最小栈栈顶相同,换句话说是否是操作栈的最小值,若是,则最小栈也需要弹出!
1class Solution 2private: 3 stack<int> sta; 4 stack<int> minSta; // 辅助栈 5public: 6 void push(int value) 7 sta.push(value); 8 if(minSta.empty()) 9 minSta.push(value); 10 else if(value <= minSta.top()) 11 minSta.push(value); 12 13 14 void pop() 15 if(sta.top() == minSta.top()) 16 minSta.pop(); // 但sta弹出时,如果和minSta相同,那么minSta也弹出 17 18 sta.pop(); 19 20 int top() 21 return sta.top(); 22 23 int min() 24 return minSta.top(); 25 26;
以上是关于包含min函数的栈的主要内容,如果未能解决你的问题,请参考以下文章