
这个题的思路就是用两个栈进行模拟,一个栈resource正常插入,删除。一个栈minval用来存目前栈中最小的数,将最小的数放在了该栈minval的顶部,这样可以直接取栈顶为最小元素。**要注意的是,栈中可能会有相同的元素,因此最小的元素也有可能相同,在向minval入栈时,相同的元素也要入栈,不仅仅是小于栈minval顶的元素,否则在删除时会出现错误。**所以在删除的时候也要判断,当前resource的栈顶是否与minval的栈顶相等,相等直接删除。
cpp
class MinStack {
private:
stack<int> source;
stack<int> minval;
public:
MinStack() {
}
void push(int val) {
source.push(val);
if(minval.empty() || minval.top()>=val) minval.push(val);
}
void pop() {
int v=source.top();
source.pop();
if(minval.top() == v) minval.pop();
}
int top() {
return source.top();
}
int getMin() {
return minval.top();
}
};