剑指offer--包含min函数的栈

来源:互联网 发布:中信国安历史交易数据 编辑:程序博客网 时间:2024/05/18 07:32

面试题21:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).

思路:每次把最小的值都保存在辅助栈里。

//包含min函数的栈template <typename Type>class StackWithMin{public:    void pop();    void push(const Type& data);    const Type& min()const;private:    stack<Type> m_dataStack;//存放数据的栈    stack<Type> m_minStack;//存放最小值的栈};template <typename Type>void StackWithMin<Type>::pop(){    assert(m_dataStack.size()>0 && m_minStack.size()>0);    m_minStack.pop();    m_dataStack.pop();}template <typename Type>void StackWithMin<Type>::push(const Type& data){    m_dataStack.push(data);    if(m_minStack.size()==0 || m_minStack.top()>data)        m_minStack.push(data);    else        m_minStack.push(m_minStack.top());}template <typename Type>const Type& StackWithMin<Type>::min()const{    assert(m_dataStack.size()>0 && m_minStack.size()>0);    return m_minStack.top();}int main(){    StackWithMin<int> st;    st.push(4);    st.push(3);    st.push(2);    st.push(1);    int min = st.min();    cout<<"StackMin:"<<min<<endl;//1    st.pop();    min = st.min();    cout<<"StackMin:"<<min<<endl;//2    st.push(0);    min = st.min();    cout<<"StackMin:"<<min<<endl;//0}

这里写图片描述

原创粉丝点击