请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
执行用时 :
56 ms, 在所有 C++ 提交中击败了6.16%的用户
内存消耗 :
17.7 MB, 在所有 C++ 提交中击败了100.00%的用户
class MinStack {
public:
/** initialize your data structure here. */
stack<int> ans,Min;//实际值栈 , 最小栈
MinStack() {
}
void push(int x) {
if(ans.size()==0){
ans.push(x);
Min.push(x);
}
else{
ans.push(x);
if(x<Min.top()){
Min.push(x);
}
else{
Min.push(Min.top());
}
}
}
void pop() {
ans.pop();
Min.pop();
}
int top() {
return ans.top();
}
int getMin() {
return Min.top();
}
};
/**
* 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();
*/
还存在改进的地方,将其中的一个 if-else 换成 min()系统函数 会增强部分性能。
执行用时 :
20 ms, 在所有 C++ 提交中击败了97.63%的用户
内存消耗 :
17.9 MB, 在所有 C++ 提交中击败了100.00%的用户
class MinStack {
public:
/** initialize your data structure here. */
stack<int> ans,Min;
MinStack() {
}
void push(int x) {
if(ans.size()==0){
ans.push(x);
Min.push(x);
}
else{
ans.push(x);
/*if(x<Min.top()){
Min.push(x);
}
else{
Min.push(Min.top());
}*/
Min.push( min( x , Min.top() ) );//系统底层函数min的效率比较高
}
}
void pop() {
ans.pop();
Min.pop();
}
int top() {
return ans.top();
}
int getMin() {
return Min.top();
}
};
/**
* 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();
*/