定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)
class MinStack {
public:
stack<int> stk,stk_min;
MinStack() {}
void push(int val) {
if(stk.empty()){
//stk空,那么stk_min一定还没有值输入
stk.push(val);
stk_min.push(val);
}
else{
stk.push(val);
//现在两个栈都有值,只需要比较新加入的值和stk_min的栈顶元素大小即可
//如果输入值小于stk_min栈顶,则将该值压栈
//如果输入值不于stk_min栈顶,则将stk_min栈顶再次压栈
stk_min.push(val<stk_min.top()?val:stk_min.top());
// if(B.top()<x){
// B.push(B.top());
// }
// else{
// B.push(x);
// }
}
}
void pop() {
//连个栈都要出栈
stk.pop();
stk_min.pop();
}
int top() {
return stk.top();
}
int getMin() {
return stk_min.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();
*/