解題思路:
(1)設置兩個數組,一個保存原始順序,一個保存最小值
(2)注意出棧時,重新設置當前最小值
class MinStack {
public:
/** initialize your data structure here. */
vector<int> v,min_v;
int m = INT_MAX;
MinStack() {}
void push(int x) {
v.push_back(x);
if (x<=m) min_v.push_back(x),m=x;
else min_v.push_back(m);
}
void pop() {
if (v.size()!=0) v.pop_back(),min_v.pop_back();
if (v.size()==0) m = INT_MAX; // 重置最小值
else m = getMin();
}
int top() {
if (v.size()!=0) return *v.rbegin();
return -1;
}
int getMin() {
if (v.size()!=0) return *min_v.rbegin();
return -1;
}
};
/**
* 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();
*/