力扣155.最小栈
题目
力扣链接:155. 最小栈 - 力扣(LeetCode)
思路
这道题不能用一个int min常量去储存最小值,因为如何最小值被pop了,此时你的min存储的最小值就是错的,而且你也找不到上一个最小值了.
所以我们得用一个栈来存储最小值.
总共有两个栈,一个st存放普通数据,一个minst放最小值.
代码
注意事项说明:
1.push函数中,如果push的val与最小值相等,那么此时val也需要入minst
2.pop函数中,先确定一下st的top是不是minst的top,如果是的话,minst也需要pop
class MinStack {
public:MinStack() {}void push(int val) {st.push(val);if(minst.size()==0||minst.top()>=val){minst.push(val);}}void pop() {if(minst.top()==st.top()){minst.pop();}st.pop();}int top() {return st.top();}int getMin() {return minst.top();}private:stack<int> st;stack<int> minst;
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/