包含min函数的栈

题目

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

思路

不可以用个中间变量来存放最小值,这种在对于如栈时最小值的更新是可以起到作用的,但是出栈是若果包含该最小值的变量弹出了,最小值就无法实现更新了,所以用一个辅助栈来实现最小值的更新

辅助栈(m_min)工作原理:

  入栈

  1. 数据进去数据栈(m_data)
  2. 当辅助栈为空时或要入栈的元素小于辅助栈的栈顶元素,进入辅助栈
  3. 当它不为空时,把辅助栈的栈顶元素在进行一次入栈操作

  出栈

  1. 数据栈和辅助栈同时弹出栈顶元素
  2. min函数只需返回辅助栈的栈顶元素
class MinStack {
private:
    stack<int> data;
    stack<int> help;
public:
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
        data.push(x);
        if (help.empty() || help.top() > x) {
            help.push(x);
        }
        else {
            help.push(help.top());
        }
    }
    
    void pop() {
        data.pop();
        help.pop();
    }
    
    int top() {
        return data.top();
    }
    
    int min() {
        return help.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->min();
 */

 

posted on 2018-12-26 23:00  tianzeng  阅读(117)  评论(0编辑  收藏  举报

导航