题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

思路一:

通过每次在压入栈顶的元素与当前最小元素相比后,保存一遍最小元素,每次弹出,都弹出两个,这个就能得到栈当前最小元素了

代码:

classSolution{public:voidpush(intvalue){if(s1.size()==0){s1.push(value);intmin=value;s1.push(min);}else{intmin=s1.top();if(value<min){min=value;}s1.push(value);s1.push(min);}}//弹出两次voidpop(){intmin=s1.top();s1.pop();intval=s1.top();s1.pop();}inttop(){intmin=s1.top();s1.pop();intval=s1.top();s1.push(min);returnval;}intmin(){returns1.top();}private:stack<int>s1;};

思路二:利用两个栈,一个栈用于压入数据,另一个栈用于压入数据时的最小元素。无论最小元素是不是压栈的元素,都保存到第二个栈中

代码:

classSolution{public:voidpush(intvalue){if(s1.size()==0){s1.push(value);s2.push(value);}else{s1.push(value);intmin=s2.top();if(min>value){s2.push(value);}else{s2.push(min);}}}voidpop(){if(!s1.empty()){s1.pop();s2.pop();}}inttop(){returns1.top();}intmin(){returns2.top();}private:stack<int>s1,s2;};