实现最小栈,使得pop,push和min操作的时间复杂度为O(1),这个时间复杂度要求是难点所在。
这里采用以空间换时间的策略,使用一个存储当前最小值的辅助栈,在压栈时,数据小于辅助栈栈顶元素则将该元素也压入辅助栈中,否则,将辅助栈栈顶元素再次压入辅助栈,表明当前被压入数据栈的元素在以后删除时不影响删除后最小值的大小。
import java.util.Stack;
public class Solution {
public Stack<Integer> stack=new Stack<Integer>();
public Stack<Integer> min_stack=new Stack<Integer>();
public void push(int node) {
stack.push(node);
if(min_stack.isEmpty() || node<min_stack.peek())
min_stack.push(node);
else
min_stack.push(min_stack.peek());
}
public void pop() {
stack.pop();
min_stack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return min_stack.peek();
}
}