1 import java.util.Stack; 2 3 /** 4 * 功能:O(1)时间复杂度求栈中最小元素 5 * 思路:空间换取时间,使用两个栈,stack1栈存储数据,stack2栈存储最小值; 6 * stack1入栈时,发现比stack2栈顶元素还小,则同时入stack2;stack1出栈时,同时也将stack2中的元素出栈。 7 */ 8 public class Main { 9 10 private Stack<Integer> stackValue = new Stack<Integer>(); 11 private Stack<Integer> stackMin = new Stack<Integer>(); 12 13 /** 14 * @param integer 15 */ 16 public void push(Integer integer) { 17 stackValue.push(integer); 18 if (integer < getMin()) { 19 stackMin.push(integer); 20 } 21 } 22 23 /** 24 * @return 25 */ 26 public Integer pop() { 27 if (stackValue.peek() == stackMin.peek()) { 28 stackMin.pop(); 29 } 30 return stackValue.pop(); 31 } 32 33 /** 34 * @return 35 */ 36 public Integer getMin() { 37 if (stackMin.size() == 0) { 38 return Integer.MAX_VALUE; 39 } 40 41 return stackMin.peek(); 42 } 43 44 public static void main(String[] args) { 45 46 Main main = new Main(); 47 48 main.push(10); 49 main.push(20); 50 main.push(9); 51 main.push(15); 52 53 System.out.println(main.getMin()); 54 } 55 }