该题目的最大难点是怎么在O(1)的时间复杂度下找到当前栈中的最小值,最常用的套路还是空间换时间
创建一个栈,该栈的元素是一个元组(该元组的俩个元素的数据类型都是 int),元组的第一个元素记录当前插入栈中的元素(也就是栈顶元素),第二个元素记录是当前栈中的最小值(插入元素与之前的最小值进行比较),注意我们创建栈的元素一直是一个元组,而不是一个int类型(相当于是把当前栈顶元素与当前栈的最小值捆绑在一起)
实现的话借用的是C++中的标准库模板pair,它允许你将两个可能不同类型的值组合成一个单元,具体的pair用法这里就不做过多解释。
class MinStack {
private:
stack<pair<int,int>> Stack; //第一个数是本身,第二个数是当前栈中最小值
public:
MinStack() {
}
void push(int val) {
if(Stack.size() == 0)
Stack.push({val,val});
else
Stack.push({val,min(Stack.top().second,val)});
}
void pop() {
Stack.pop();
}
int top() {
return Stack.top().first;
}
int getMin() {
return Stack.top().second;
}
};
/**
* 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();
*/