思路源自
【力扣hot100】【LeetCode 155】最小栈
为了让检索时间达到o(1),采用空间换时间,维护两个栈,第一个栈实现正常的push、pop、top,另一个栈的栈顶每次都只放以一个栈中最小的元素
class MinStack {private Stack<Integer> stack1;private Stack<Integer> stack2;public MinStack() {stack1 = new Stack<>();stack2 = new Stack<>();}public void push(int val) {stack1.push(val);if (stack2.isEmpty()) {stack2.push(val);} else {stack2.push(val < stack2.peek() ? val : stack2.peek());}}public void pop() {stack1.pop();stack2.pop();}public int top() {return stack1.peek();}public int getMin() {return stack2.peek();}
}
/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/