题目:
设计一个栈,支持push、pop、top和在常量时间内检索最小元素
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.
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.
思路:
用两个栈来分别存放最小数和正常栈
同【剑指offer第二版——面试题30(java)】——https://blog.csdn.net/qq_22527013/article/details/89739627
代码:
class MinStack {
/** initialize your data structure here. */
Stack<Integer> st;
Stack<Integer> minS;
public MinStack() {
st = new Stack<Integer>();
minS = new Stack<Integer>();
}
public void push(int x) {
st.push(x);
if(minS.isEmpty()) {
minS.push(x);
}else {
if(minS.peek()>=x) {
minS.push(x);
}
}
}
public void pop() {
if(!st.isEmpty()) {
int min = minS.peek();
int s = st.peek();
if(min==s) {
minS.pop();
}
st.pop();
}
}
public int top() {
return st.peek();
}
public int getMin() {
return minS.peek();
}
}