主要参考:
https://blog.csdn.net/SoulOH/article/details/81268064
1.用两个栈实现
2.用一个栈实现,遇到最小值改变的情况需要push或者pop两次。
但在实现过程中,push操作一开始我使用了<而不是<=,wa了。
原因:等号情况下最小值虽然不会改变,但因为pop操作默认在遇到最小值情况下会弹出两次,如果之前之push了一次就会乱掉。因此为了保持push和pop操作但平衡,需要有=。
附第二种方法代码。
class MinStack {
public:
stack<int> stk;
int min = INT_MAX;
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
if(x<=min){ //注意这个等号
stk.push(min);
min = x;
}
stk.push(x);
}
void pop() {
if(stk.top() == min){
stk.pop();
min = stk.top();
}
stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return min;
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/