引言:
实现一个栈,带有出栈、入栈、取最小值三个方法,并要求这三个方法的时间复杂度都为O(1)
最小栈问题
实现一个栈,带有出栈、入栈、取最小值三个方法,并要求这三个方法的时间复杂度都为O(1)
出栈入栈都可以用O(1)实现,最重要的是实现取最小值,最小值我们必须存起来,存在另一个栈中。
如下图,先入栈4、9、7、3、8、5
再出栈三次

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import java.util.Stack;
public class MinimumStack {
private Stack<Integer> mainStack = new Stack();
private Stack<Integer> minStack = new Stack();
public void push(int e) { if (minStack.isEmpty() || e <= minStack.peek()) { minStack.push(e); } mainStack.push(e); }
public int pop() { if (mainStack.peek().equals(minStack.peek())) { minStack.pop(); } return mainStack.pop(); }
public int getMin(){ return minStack.peek(); }
public static void main(String[] args) { MinimumStack stack = new MinimumStack(); stack.push(4); stack.push(9); stack.push(7); stack.push(3); stack.push(8); stack.push(5); System.out.println(stack.getMin()); stack.pop(); stack.pop(); stack.pop(); System.out.println(stack.getMin()); } }
|