剑指offer之面试题21:包含min函数的栈
题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的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;};
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。