解题思路:
使用辅助栈,一个正常栈的操作,另一个栈用于存最小值。
对于辅助栈:
- push:因为要始终保证辅助栈的栈顶元素为最小值,所以入栈的时候比较入栈元素和栈顶元素(原本栈里的最小值),然后将较小的值入栈,来确保栈顶元素始终为栈的正常栈里的最小值
- pop:与正常栈同步,双方同时pop即可,去掉了双方都去掉了栈顶元素,即相当于返回上一步,两个栈保持同步,既可以保证辅助栈的栈顶依旧可以保证功能
C++:
class MinStack {
stack<int> x_stack;
stack<int> min_stack;
public:
MinStack() {
min_stack.push(INT_MAX);
}
void push(int val) {
x_stack.push(val);
min_stack.push(min(val, min_stack.top()));
}
void pop() {
x_stack.pop();
min_stack.pop();
}
int top() {
return x_stack.top();
}
int getMin() {
return min_stack.top();
}
};
/**
* 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();
*/
python:
class MinStack:
def __init__(self):
self.stack = []
self.min_stack = [math.inf]
def push(self, val: int) -> None:
self.stack.append(val)
self.min_stack.append(min(val, self.min_stack[-1]))
def pop(self) -> None:
self.stack.pop()
self.min_stack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.min_stack[-1]
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()