码迷,mamicode.com
首页 > 其他好文 > 详细

【程序员面试金典】面试题 03.02. 栈的最小值

时间:2020-06-17 20:02:45      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:public   辅助   空间   pop   出栈   ali   push   lan   turn   

思路

借助辅助栈保存当前栈最小值。

  • 入栈:如果入栈元素小于最小栈的栈顶元素,则同时加入最小栈;否则,将最小栈栈顶元素再次加入最下栈
  • 出栈:同时弹出两个栈中元素

代码

时间复杂度:O(1)
空间复杂度:O(1)

class MinStack {
    stack<int> st1;
    stack<int> st2;
public:
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
        st1.push(x);
        if (!st2.empty()) {
            if (x < st2.top()) st2.push(x);
            else st2.push(st2.top());
        } else {
            st2.push(x);
        }
    }
    
    void pop() {
        if (!st1.empty()) {
            st1.pop();
            st2.pop();
        }        
    }
    
    int top() {
        if (!st1.empty()) return st1.top();
        return -1;
    }
    
    int getMin() {
        if (!st2.empty()) return st2.top();
        return -1;
    }
};

【程序员面试金典】面试题 03.02. 栈的最小值

标签:public   辅助   空间   pop   出栈   ali   push   lan   turn   

原文地址:https://www.cnblogs.com/galaxy-hao/p/13154075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!