Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的getMin函数。要求调用getMin,push, pop的时间复杂度均为O(1)
解题思路
一般求解线性结构中的求中最小元素,遍历一遍即可求出。
但如果这样做不满足本题要求:时间复杂度O(1)。
且栈结构,只能访问栈顶,否则破坏了栈结构。
因此必须在每次压栈的时候,都要确定此时栈中的最小元素。可以开个辅助数组保存。
代码:
class MinStack {
public:
stack<int>s1,s2;// 一个存数据,一个辅助栈
void push(int value) {
s1.push(value);
if(s2.empty())
s2.push(value);
else
s2.push(s2.top()<value?s2.top():value);
}
void pop() {
if(!s1.empty())
{
s1.pop();
s2.pop();
}
}
int top() {
return s1.top();
}
int getMin() {
return s2.top();
}
};
如果有更好的想法,欢迎交流!