非常经典的题目了。双栈法,一个普通栈,一个最小值栈
入栈时:除了入普通栈之外,如果当前待入栈元素小于等于最小值栈顶元素,那么同时入最小值栈
出栈时:除了出普通栈之外,如果当前待出栈元素小于等于最小值栈顶元素,那么同时出最小值栈
查看栈顶元素:返回普通栈顶元素
查看最小元素:返回最小值栈顶元素
代码:
1 stack<int> st; 2 stack<int> minSt; 3 4 void push(int x) { 5 st.push(x); 6 if (minSt.empty() || x <= minSt.top()) 7 minSt.push(x); 8 } 9 10 void pop() { 11 if (st.empty()) return; 12 if (st.top() == minSt.top()) 13 minSt.pop(); 14 st.pop(); 15 } 16 17 int top() { 18 if (st.empty()) return -1; 19 else return st.top(); 20 } 21 22 int getMin() { 23 if (st.empty()) return -1; 24 else return minSt.top(); 25 }