注:七月在线听课笔记
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.
Example:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.
使用vector来实现一个栈。
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
st.push_back(x); //向vector压入元素
if(mins.size()>0 && (x>mins.back())){
mins.push_back(mins.back());
}else{
mins.push_back(x);
}
}
void pop() {
int ret = st.back(); //存放当前vector的末尾元素
st.pop_back(); //弹出末尾元素
mins.pop_back(); //弹出末尾元素
}
int top() {
return st.back(); //st.back()返回当前vector末尾元素
}
int getMin() {
return mins.back(); //mins.back()返回当前vector末尾元素
}
protected:
vector<int> st; //定义一个vector存放压入栈的数据
vector<int> mins; //定义一个vector存放入栈数值的最小值
};
结果:通过
举例:
/*
准备入栈的数据 1,4,8,-3,6
st mins top=st.back() getMin= min.back()
[1] -> [1] [1] [1]
[1,4] -> [1,1] [4] [1]
[1,4,8] -> [1,1,1] [8] [1]
[1,4,8,-3] -> [1,1,1,-3] [-3] [-3]
[1,4,8,-3,6] -> [1,1,1,-3,-3] [6] [-3]
*/