题目
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的栈顶就压入minStack。只要minStack栈顶的值没有被pop出去,它就一定是目前最小的值。如果后来有压入比它小的值,一定会被压入minStack,这样minStack新的栈顶还是目前的最小值
其实不太确定这种数据结构题能不能用语言本身的结构体来写
class MinStack {
Stack<Integer> stack;
Stack<Integer> minStack;
/** initialize your data structure here. */
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
stack.push(x);
if(minStack.isEmpty() || x <= minStack.peek()) {
minStack.push(x);
}
}
public void pop() {
if(stack.isEmpty()) {
return;
}
int x = stack.pop();
if(minStack != null && x == minStack.peek()) {
minStack.pop();
}
}
public int top() {
if(stack.isEmpty()) {
return 0;
}
return stack.peek();
}
public int getMin() {
if(minStack.isEmpty()) {
return 0;
}
return minStack.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/