思路:
每次往栈中压入两个元素,1个是实际要入栈的元素,1个是当前栈中的最小元素。这样是为了方便迅速查找到当前栈中的最小元素
设计:
入栈 先判空,若是,那么最小元素min与第一个元素el相等,连续入栈2个el;若不是,先top()看一下未入栈时的最小元素min,再入栈el,最后入栈最小元素(通过比较min和新入栈的el来决定)
出栈 先判空,若非空,则连续出2个元素(第一个是min,第二个是el)
取最小值 直接st.top(注意st与自己的栈是两回事)
top 先判空。。。先保存min,出栈,top看el,然后把min入栈
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
if(st.empty()){
st.push(x);
st.push(x);
}
else{
int min=st.top();
st.push(x);
if(x<min)
st.push(x);
else
st.push(min);
}
}
void pop() {
if(!st.empty()){
st.pop();
st.pop();
}
}
int top() {
int min=st.top();
st.pop();
int ret=st.top();
st.push(min);
return ret;
}
int getMin() {
return st.top();
}
private:
stack<int> st;
};
网友评论