题目描述:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f8c67d34f3bc116e9fa9f6a010393000.png#pic_center)
注意:本题与主站 155 题相同:https://leetcode-cn.com/problems/min-stack/
思路:
在自定义的Minstack中定义两个栈,一个mainStack
用来存放正常的栈,用来保证正常的栈的操作。另一个栈minStack
用来保存历次添加最小的数。由于栈是遵循后进先出的原则,所以可以很好地使用两个栈完成操作。
代码:
class MinStack {
public:
/** initialize your data structure here. */
stack<int> mainStack;
stack<int> minStack;
MinStack() {
}
void push(int x) {
mainStack.push(x);
if (minStack.empty()) {
minStack.push(x);//空栈,推入(相当于第一个最小的)
} else if (x <= minStack.top()) {
minStack.push(x);//加入历来几个最小的记录
}
}
void pop() {
int x = mainStack.top();
if (minStack.top() == x) {//如果是和mainStack一样的就把minStack里的也pop
minStack.pop();
}
mainStack.pop();
}
int top() {
return mainStack.top();
}
int min() {
return minStack.top();
}
};
/**
* 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->min();
*/