题目描述
描述:请设计一个栈,除了常规栈支持的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.
解题思路
思路1:最直观的想法是,使用一个栈st记录栈元素,使用一个栈minst记录当前栈的最小元素。栈minst的具体做法如下:当栈minst为空或者当前元素x小于等于栈minst栈顶元素才将x压入栈;当st栈不为空并且st栈栈顶和minst栈顶元素相同才同时弹出st和minst栈顶元素;getMin即返回minst栈顶元素。
MinStack() {
}
stack<int> st;
stack<int> minst;
void push(int x) {
st.push(x);
// 注意等于!
if(minst.empty()||x<=minst.top())
minst.push(x);
}
void pop() {
if(!st.empty())
{
if(st.top()==minst.top())
{
st.pop();
minst.pop();
}
else
st.pop();
}
}
int top() {
return st.top();
}
int getMin() {
return minst.top();
}
总结:注意,记录当前栈的最小元素和最小栈不太一样喔!