题意理解
设计一个栈类,支持常量时间取栈内最小值
问题分析
本题解法很多,选取的解法的一个点值得借鉴:
空间换时间,开辟一个最小栈与原栈同步,最小栈内放入最大值,避免每次操作判断栈内有没有元素。
0913:最小栈有讲究,每次放入的元素都是当前的最小值,严格递减栈,如果相同最小值,也要都入栈。
其他
链接
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
min_stack.push(INT_MAX); //空间换时间,减少判断
}
void push(int x) {
my_stack.push(x);
min_stack.push(min(x, min_stack.top()));
}
void pop() {
my_stack.pop();
min_stack.pop();
}
int top() {
int a = 0;
a = my_stack.top();
return a;
}
int getMin() {
int a = 0;
a = min_stack.top();
return a;
}
private:
stack<int> my_stack;
stack<int> min_stack; //双栈保证常量时间取最小值
};
/**
* 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();
*/