方法一:辅助栈,使用另一个栈保存最小值。
class MinStack {
long min_;
stack<int> Min;
stack<int> sta;
public:
/** initialize your data structure here. */
MinStack() {
min_=INT32_MAX;
}
void push(int x) {
sta.push(x);
min_ = min_<x?min_:x;
Min.push(min_);
}
void pop() {
sta.pop();
Min.pop();
if(Min.empty()) min_ = INT32_MAX;
else min_ = Min.top();
}
int top() {
return sta.top();
}
int min() {
return Min.top();
}
方法二:差值栈。只使用一个栈,栈中保存的是元素与上一个最小值的差值。
空间复杂度O(N),时间复杂度O(1)
class MinStack {
long long MIN;
stack<long long > sta;
public:
/** initialize your data structure here. */
MinStack() {
}
void push(long long x) {
if(sta.empty()){
MIN = x;
sta.push(0);
}else{
sta.push(x-MIN);
MIN = ::min(MIN,x);
}
}
void pop() {
if(sta.top()<0) MIN = MIN-sta.top();
sta.pop();
}
int top() {
if(sta.top()>=0) return sta.top()+MIN;
else return MIN;
}
int min() {
return MIN;
}
};