LeetCode/155. Min Stack.md
2018-10-15 23:51:04 +08:00

965 B
Raw Blame History

155. Min Stack

思路

实现最小栈要求所有操作的时间复杂度都为O(1)。
可考虑用两个站S1、S2S1就正常记录minStack的值而S2的栈顶记录了当前Minstack的最小值。S2的更新规则见代码。

C++

class MinStack {
private:
    stack<int> s1;
    stack<int> s2; // S2的栈顶记录了当前Minstack的最小值
public:
    /** initialize your data structure here. */
    MinStack() {
    }
    
    void push(int x) {
	    s1.push(x);
	    if (s2.empty() || x <= getMin())  s2.push(x); // 新来的x比getMin还小说明是新的最小值应该入栈S2	    
    }
    void pop() {
	    if (s1.top() == getMin())  s2.pop(); // 若pop掉了最小元素则S2也应该pop一个
	    s1.pop();
    }
    int top() {
	    return s1.top();
    }
    int getMin() { // S2的栈顶记录了当前Minstack的最小值
	    return s2.top();
    }
};