一:解题思路
定义2个栈,一个栈st,另外一个栈min专门用来保存st栈的最小值。这样就可以在常数时间内检索到最小元素。
二:完整代码示例 (C++版和Java版)
C++:
class MinStack { public: stack<int> st; stack<int> min; MinStack() { } void push(int x) { st.push(x); if (min.empty() || x <= getMin()) min.push(x); } void pop() { if (st.top() == getMin()) min.pop(); st.pop(); } int top() { return st.top(); } int getMin() { return min.top(); } };
Java:
class MinStack { private Stack<Integer> st=new Stack<>(); private Stack<Integer> min=new Stack<>(); public MinStack() { } public void push(int x) { st.push(x); if(min.empty() || x<=getMin()) min.push(x); } public void pop() { if(st.peek()==getMin()) min.pop(); st.pop(); } public int top() { return st.peek(); } public int getMin() { return min.peek(); } }