标签:ret tac 最小栈 private pop 操作 push 函数 因此
【问题】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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};
标签:ret tac 最小栈 private pop 操作 push 函数 因此
原文地址:https://www.cnblogs.com/zhudingtop/p/11332858.html