面试题·03.02

请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。

示例:

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

minStack.getMin();  

--> 返回 -3.minStack.pop();minStack.top();    

 --> 返回 0.minStack.getMin();  

--> 返回 -2.

class MinStack {
private:
    //声明两个栈,一个为主栈,用于存储当前的数据,另外一个为辅助栈,用于记录当前栈的最小值
    stack main_stack;
    stack help_stack;

public:
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
       main_stack.push(x);
       //判断当前的数据值
       if(empty(help_stack))
            help_stack.push(x);
        else{
            if(help_stack.top() > x){
                help_stack.push(x);
            }else{
                //获取当栈顶元素值
                int temp = help_stack.top();
                help_stack.push(temp);
            }
        }
    }
    
    void pop() {
        main_stack.pop();
        help_stack.pop();
    }
    
    int top() {
        return main_stack.top();
    }
    
    int getMin() {
        return help_stack.top();
    }
};

 

你可能感兴趣的:(数据结构,C++,机器学习算法面试)