剑指offer - 包含min函数的栈

来源:互联网 发布:seo专业优化公司 编辑:程序博客网 时间:2024/05/15 01:39

定义栈的数据结构,并在该类型中实现一个能够得到栈最小值的 min 函数,使得调用 min, pop, push 的时间复杂度均为1。


思路:在入栈和出栈的过程中,借助一个辅助栈来记录每次操作后的当前栈的最小值。比如当前栈压入了一个更小的值,可以将该最小值压入辅助栈中,这样辅助栈的栈顶就是当前栈的最小值了。而如果当前栈弹出一个元素,那么可以将辅助栈的栈顶弹出。注意到通过这种方式,辅助栈跟当前栈的 size 大小始终是一样的。


代码实现( data_stack 为数据栈,即当前栈; help_stack 为辅助栈 )

template<T>  void  StackWithMin<T>::push( const T& value ){data_stack.push( value );if( value < help_satck.top() ){help_stack.push( value );}else{help_stack.push( help_stack.top() );}}template<T>  void StackWithMin<T>::pop(){// assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行assert( data_stack.size() > 0 && help_stack.size() > 0 ); data_stack.pop();help_stack.pop();}template<T> const  T&  StackWithMin<T>::min() const {assert( data_stack.size() > 0 && help_stack() > 0 );return help_stack.top();}




0 0
原创粉丝点击