LeetCode链接: link.
解题思路:
这样就可以保证,不管入栈还是出栈来找到那个最小栈值的时间复杂度都为O(1)。_minST的top永远是当前插入栈中数据的最小值。
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int val) {
_st.push(val);
//这里的_minST.top() >= val等于就是防止同样的两个最小值
//如果不加等于,那么当你等于的时候就可能把_minST栈里面唯一的一个值给删掉了,那么后续你就找不到栈里最小值是哪一个了。
if(_minST.empty() || _minST.top() >= val)
_minST.push(val);
}
void pop() {
if(_st.top() == _minST.top())
_minST.pop();
_st.pop();
}
int top() {
return _st.top();
}
int getMin() {
return _minST.top();
}
private:
stack<int> _st;
stack<int> _minST;
};